程序的约束

时间:2009-02-08 07:20:48

标签: ruby binding

是否可以在另一个对象的上下文中执行proc?

我知道通常你会做proc.call(foo),然后块应该定义一个参数。我想知道我是否可以“自我”绑定到foo,这样就没有必要有一个块参数。

proc = Proc.new { self.hello }

class Foo
  def hello
    puts "Hello!"
  end
end

foo = Foo.new

# How can proc be executed within the context of foo
# such that it outputs the string "Hello"?

proc.call

2 个答案:

答案 0 :(得分:44)

foo.instance_eval &proc

instance_eval可以取块而不是字符串,&运算符将proc转换为块以供方法调用使用。

答案 1 :(得分:0)

这是红宝石1.9:

class MyCat
  def initialize(start, &block)
    @elsewhere = start
    define_singleton_method(:run_elsewhere, block) if block_given?
  end
end
MyCat.new('Hello'){ @elsewehere << ' world' }.run_elsewhere