Что блокирует Ruby? Он похож на Smalltalk, но вы не можете отправлять ему сообщения.
Например, в smalltalk:
[:x | x + 3] value: 3
возвращает 6. Но в ruby:
{|x| x + 3}.call 3
вызовет SyntaxError.
Ну, вы можете передавать сообщения в лямбда в ruby, хотя:
irb(main):025:0> ->(x){x+3}.call 3
=> 6
Итак, в Ruby блок не является блоком, но лямбда - это блок? Это правда? Я имею в виду, существуют ли какие-либо различия между рубинским лямбда и блоком smalltalk? Если это так, то каков блок ruby?
Обновление:
Из комментария и ответа ниже, вместе с некоторыми поисковыми системами, я думаю, я имеют больше понимания блока Ruby. В Ruby обычно часть кода оценивает значение, и каждое значение является объектом. Но блок не оценивает значение. Так что это не объект. Вместо этого он может действовать как часть объекта. Например, в {| x | x + 3} может действовать как часть объекта proc {| x | x + 3}.
Но это меня смутило. В smalltalk почти каждое выражение можно разделить на объекты (привязка к переменным - это исключения). Кажется, в Ruby есть больше исключений.