Почему функции индексируются в Python, а не в PHP? - PullRequest
0 голосов
/ 09 ноября 2010

Я имею в виду не этот вопрос о Python против PHP, а о языках в целом. Я использую Python и PHP в качестве примеров, потому что я их знаю.

В Python мы можем сделать mytoken = mystring.split(mydelimiter)[1], получая доступ к списку, возвращенному str.split, даже не назначая его списку. В PHP мы должны поместить массив в память перед доступом к нему, как в $mytokenarray = explode($mydelimiter, $mystring); $mytoken = $mytokenarray[1];. Насколько я знаю, это невозможно сделать в одном выражении, как в Python.

Что происходит за этой разницей?

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

Если вы попытаетесь сделать это в php

$mytokenarray = explode($mydelimiter, $mystring)[1];

, обратите внимание на полученную ошибку: Parse error: syntax error, unexpected '['.

Это означает, что php расстраивается, когда пытается проанализировать код, а не когда он пытается выполнить его.Я подозреваю, что это означает, что грамматика php (которая, как я слышал, генерируется на лету, хотя я на самом деле понятия не имею) говорит, что вы не можете поставить '[' после statement или expression или как там их называют,Скорее, вы можете, вероятно, ставить '[' только после переменной.

Вот грамматика Python.http://docs.python.org/reference/grammar.html, содержащее правило trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME Оттуда вы можете видеть, что trailer является частью atom, которая также может содержать [.Вы начинаете понимать, что это довольно сложно.

Бла-бла-бла, короче говоря, вы узнаете о компиляторах или, что еще лучше, напишите один для игрушечного языка.Тогда у вас будет масса понимания языковых особенностей.

1 голос
/ 24 июля 2014

Эта функция теперь возможна в PHP начиная с версии 5.4.

1 голос
/ 09 ноября 2010

Это дизайнерское решение, которое выбрали авторы языков.Обычно говорят (и это, конечно, не всегда так), чем лучше синтаксис языка, тем медленнее он будет.Показательный пример: Ruby.

...