重写简单的ruby函数以使用块

时间:2010-02-11 08:27:56

标签: ruby function yield

我不知道正确的术语。我试图谷歌它,因为那个原因找不到任何东西。

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

你能说一下我的方式吗?

1 个答案:

答案 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版本特别实惠。)