9

我不知道正确的术语。我试图用谷歌搜索它,但由于这个原因找不到任何东西。

我正在编写一个 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

你能概述一下我做这件事的方法吗?

4

1 回答 1

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 出色的Ruby Best Practices书籍最近获得 Creative-Commons 许可的第 2 章中的“接口简化块”部分。(作者和出版商都在逐步抄袭,当然你也可以买一本来支持,iPhone版特别实惠。)

于 2010-02-11T08:44:48.177 回答