2014-09-04 1 views
3

Я удивлен особой чувствительностью к синтаксису в Ruby. Все они работают:Вызов вызова вложенного назначения и без привязки Ruby

var = method arg 
var2 = (var1 = method arg) 
method2(method1 arg) 

Но это не делает:

method2(var = method1 arg) 

Вместо этого я должен сделать что-либо в этом, с дополнительными скобках:

method2(var = method1(arg)) 

..or это, что я найти гораздо более неоднозначную, чем версия, которая не срабатывает:

method2 var = method1(arg) 

Я предполагаю, что это либо конкретное дизайнерское решение, либо побочный эффект другого, и будет признателен за любое понимание этих решений.

Обратите внимание, что я не ищу никаких мнений о стиле; Я не спрашиваю, что выглядит лучше, или то, что вы думаете, должно или не должно работать. Я даже укажу, что эта конкретная конструкция была бы более ясной, если бы полностью разделилась на два отдельных заявления. Мне просто интересно узнать о реальных причинах, по которым Ruby работает таким образом, от любого, у кого может быть эта справочная информация.

+0

Что это за старая поговорка, только Perl может разобрать Ruby? Или что-то в этом роде ... –

+0

@ JörgWMittag - поскольку никто, кажется, не имеет более глубокого понимания, пожалуйста, отправьте свой комментарий в качестве ответа, и я его приму. –

ответ

1

Я предполагаю, что это либо конкретное конструкторское решение, либо побочный эффект другого, и было бы полезно понять эти решения.

Синтаксис Ruby смехотворно сложный. И поскольку в большинстве реализаций Ruby используется генератор синтаксического анализатора, такой как Bison, который, однако, на самом деле не настолько силен, чтобы разбирать такой смехотворный сложный язык, the parsers tend to be even more ridiculously complex. Гораздо более вероятно, что это два странных парсинговых угловых случая, взаимодействующих даже более странным образом, чем любое сознательное дизайнерское решение.

Смежные вопросы