我不知道正确的术语。我试图谷歌它,因为那个原因找不到任何东西。
我正在编写一个Ruby库,我想重写这些函数,以便它们按照我喜欢的方式工作,以便于阅读(在块内?)
我有一个执行此操作的功能
@dwg = Dwg.new("test.dwg")
@dwg.line([0,0,0],[1,1,0])
@dwg.save
我想重写它,所以它像这样工作
Dwg.new("test.dwg") do
line([0,0,0],[1,1,0])
save
end
你能说一下我的方式吗?
答案 0 :(得分:15)
您可以定义Dwg
的初始值设定项以获取块,然后使用instance_eval
生成该块,如下所示:
class MyClass
def initialize(name, &block)
@name = name
instance_eval &block
end
def show_name
puts 'My name is ' + @name
end
end
MyClass.new('mud') do
show_name
end
# >> My name is mud
有关详细信息,请参阅最近由Gregory Brown出版的Chapter 2优秀Ruby Best Practices书中获得Creative-Commons许可{{3}}版的“接口简化模块”部分。 (它的作者和出版商正在逐步完成整个过程,但你当然可以购买一份副本来支持这项工作.iPhone版本特别实惠。)