如何在Ruby中的实例(对象本身)上使用do end block?

时间:2013-07-05 15:27:15

标签: ruby ruby-gnome2

w = Gtk::window.new
w do
   title = "foo"
   resizable = false
   foo = bar
end

我希望在将块传递给块后将块中的每个方法调用self

-Thanks。

2 个答案:

答案 0 :(得分:1)

我认为一种方法可以是使用#instance_eval,如:

a = 'asd'
a.instance_eval do
  a.upcase!
end

a # => ASD

在块中获取对象的其他方法是使用#tap,但你不会拥有自己:

gkt_window = Gtk::window.new

gtk_window.tap do |w|
  w.title     = 'foo'
  w.resizable = false
  w.foo       = bar
end # Now gtk_window will have all properties set and you can chain methods to this block

答案 1 :(得分:0)

您可以使用BasicObject#instance_eval

w.instance_eval do
  title = 'foo'
  resizable = false
  foo = bar
end