如何使用块来更改ruby中的执行上下文?

时间:2014-07-25 21:12:47

标签: ruby block

我为帐户对象创建了factory,并且我设置了这样的名称:

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

有没有办法使用块来更改执行上下文以消除冗余的Faker::Hacker调用?我想结束这样的事情:

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

谢谢!

2 个答案:

答案 0 :(得分:3)

看起来您正在向类/模块发送方法,因此可以使用Module#class_eval方法简单地重写您的示例:

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

将调用传递给class_eval类的Faker::Hacker的块中的方法。

答案 1 :(得分:0)

根据您的问题不是一个完整的解决方案,但输入的次数要少得多:

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