ruby - 重写简单的 ruby​​ 函数以使用 block

标签 ruby function yield

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

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

相关文章:

python - "yield item"与 return iter(items) 相比有什么优势?

arrays - Ruby:字符串在数组中显示为字符串

ruby-on-rails - 是什么导致 "NoMethodError: undefined method ` 包括 ?' for nil:NilClass"

javascript - 将 JavaScript 行为添加到 Ruby 代码?

javascript - 保存 JS 对象的功能不起作用

Javascript使用嵌套函数作为对象来访问

python - 产量有一个罕见的行为

ruby - 如何获得元素中最常见的类

javascript - 删除运算符不适用于原型(prototype)属性

python - 在通过map()调用的函数中使用yield关键字代替return