У меня есть пара вопросов о методах, процедурах и блоках Ruby, которые кажутся мне довольно странными. Это не столько синтаксис или функция, сколько логика решений.
Вопрос 1:
Почему блоки могут быть переданы методам (например, каждый), но они не могут быть назначены переменной?
Я знаю, что вы можете передавать их в процедурах, т.е. p = Proc.new {...}
(доступ с помощью &p
), но не имеет большого смысла заставить программиста использовать эти средства.
Вопрос 2:
Почему существует дифференциация между методами и процедурами?
Например, я могу выполнить задачу определения функции и вызова этой функции двумя способами:
def square(x)
x**2
end
square(3)
=> 9
или
square = lambda {|x| x**2}
square.call(3)
=> 9
Почему дифференциация? В Python, например, как определение функции стандартным способом, так и square = lambda x: x**2
выполняет ту же задачу создания функции и назначения ее square
.