Почему вызов лямбды Ruby 1.9 не возможен без точки перед круглыми скобками?

И если бы Вы просто хотите создать ограничение самостоятельно, можно использовать ALTER TABLE

alter table MyTable
add constraint MyTable_MyColumn_FK FOREIGN KEY ( MyColumn ) references MyOtherTable(PKColumn)

, который я не рекомендовал бы синтаксису, упомянутому Sara Chipps для встроенного создания, просто потому что я скорее назову свои собственные ограничения.

19
задан Alexander Presber 22 March 2013 в 10:48
поделиться

2 ответа

AFAIK Это потому, что Ruby не позволяет определить метод () для объекта. Причина, по которой она не позволяет определить метод () [) , вероятно, связано с тем, что скобки являются необязательными в вызовах метода.

И за то, что это стоит, вот взлом, чтобы позволить вам вызвать лямбдас, используя () http://github.com/coderrrr/parentcesis_hacks/blob/master/lib/lambda.rb

10
ответ дан 30 November 2019 в 05:04
поделиться

Ruby в основном на 100% объектно-ориентирован, но иногда он пытается скрыть этот факт для ... удобства? Знакомство?

В основном функции, определенные «на верхнем уровне», в действительности определяются как методы глобального объекта. Чтобы это работало, вызов без спецификатора действительно преобразуется в вызов метода с этим именем для указанного глобального объекта. Этот стиль делает вещи более скриптовыми. Ruby пытается сделать это в вашем последнем примере.

Первые два примера разбираются нормально, потому что Ruby знает, что вы пытаетесь получить доступ к методам объекта proc - помните, что даже [] - это просто метод, который вы можете определить. Точка с явной точкой также работает, потому что точка означает «отправить это сообщение этому объекту» (в данном случае a ).

Я знаю, что это ничего не «решает», но я надеюсь, что это немного поможет.

6
ответ дан 30 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: