我不知道正确的术语.我试图google它,找不到任何因为这个原因.
我正在编写一个Ruby库,我想重写这些函数,所以他们的工作方式如下,因为我喜欢它的可读性(在一个块内?)
我有一个这样做的功能
@dwg = Dwg.new("test.dwg") @dwg.line([0,0],[1,1,0]) @dwg.save
我想重写它,所以它的工作原理
Dwg.new("test.dwg") do line([0,0]) save end
你可以概述我的方式吗?
解决方法
您可以定义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“创意共享许可Chapter 2”中的“界面简化框架”一节. (它的作者和发行商正在逐渐把整个事情整合起来,但是你当然可以买一个副本来支持这个工作,iPhone版是特别实惠的.)