Я не знаю корректную терминологию. Я пытался погуглить его и ничего не мог найти по этой причине.
Я пишу библиотеку Ruby, и я хочу переписать функции, таким образом, они работают как ниже, поскольку я предпочитаю его для удобочитаемости (в блоке?)
У меня есть функция, которая делает это
@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
, чтобы он принимал блок, а затем переходил к этому блоку с помощью 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
Для получения дополнительной информации см. раздел "Блоки для упрощения интерфейса" в недавно лицензированной по Creative-Commons главе 2 превосходной книги Грегори Брауна Ruby Best Practices . (Ее автор и издатель постепенно распространяют лицензию на всю книгу, но вы, конечно, все еще можете купить копию, чтобы поддержать работу. Особенно доступно издание для iPhone.)
.