2014-07-25 25 views
2

我创建一个帐户对象factory和我设置这样的名字:如何使用块更改ruby中的执行上下文?

name { "#{Faker::Hacker.ingverb} #{Faker::Hacker.adjective} #{Faker::Hacker.noun}" } 

是否有使用块来改变执行上下文,消除冗余Faker::Hacker调用的方法吗?我想结束这样的事情:

name { Faker::Hacker { "#{ingverb} #{adjective} #{noun}" } } 

谢谢!

+0

http://stackoverflow.com/q/5851127/438992果壳:'绑定'是你的朋友 - 如果它真的值得。 –

回答

3

它看起来像您发送方法,一类/模块,所以你的例子可使用的简单改写Module#class_eval方法:

name { Faker::Hacker.class_eval { "#{ingverb} #{adjective} #{noun}" } }

将调用传递给class_evalFaker::Hacker类的块的方法。

+0

谢谢。这正是我所期待的。 – spinlock

0

不是一个完整的解决方案,根据您的问题,但少了很多类型:

h = Faker::Hacker 
name { "#{h.ingverb} #{h.adjective} #{h.noun}" } 
相关问题