Как использовать do end block для экземпляра (самого объекта) в Ruby?

Вопрос:
w = Gtk::window.new
w do
title = "foo"
resizable = false
foo = bar
end

Я хочу вызвать каждый метод в блоке к self после передачи его в блок.

-thanks.

Лучший ответ:

Я считаю, что одним из способов сделать это может быть использование #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

Вы можете использовать BasicObject#instance_eval:

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

Оцените статью
TechArks.Ru
Добавить комментарий