我不知道正确的术语。我试图用谷歌搜索它,但由于这个原因找不到任何东西。
我正在编写一个 Ruby 库,我想重写这些函数,以便它们像下面那样工作,因为我更喜欢它的可读性(在一个 block 内?)
我有一个函数可以做到这一点
@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
你能概述一下我处理这件事的方法吗?
最佳答案
您可以定义 Dwg
的初始化程序来获取一个 block ,然后使用 instance_eval
屈服于该 block ,如下所示:
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
有关详细信息,请参阅最近获得知识共享许可的 Chapter 2 中的“界面简化 block ”部分格雷戈里布朗的优秀 Ruby Best Practices书。 (它的作者和出版商逐渐抄送了整件事,但你当然仍然可以购买一份副本来支持这项工作。iPhone 版本特别实惠。)
关于ruby - 重写简单的 ruby 函数以使用 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2243123/