Каков приоритет в этом выражении? - PullRequest
0 голосов
/ 25 ноября 2018

Когда я запускаю эту программу:

print(rand*100)

Я получаю значения из [0,1) диапазона.

Но для этого:

print(100*rand)

Я получаю значения из[0,100) range.

Какой здесь приоритет?и почему первое выражение не возвращает значения из [0,100) диапазона?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Вы всегда можете использовать B :: Deparse , чтобы увидеть, как Perl анализирует выражение.

$ perl -MO=Deparse -e'print(100*rand)'
print 100 * (rand);
-e syntax OK
$ perl -MO=Deparse -e'print(rand*100)'
print rand *100;
-e syntax OK
0 голосов
/ 25 ноября 2018

Проблема не в президентстве, а в синтаксисе.Наличие глобуса "*", который делает число неработоспособным.

print rand 100;

= 0 - 100

print (rand(100)); 

... дает тот же результат.

print rand *100

... игнорируется

По сути, вы создали число "* 100"."i100" - интересное число, но я не уверен, как оно рандомизировано :-)

0 голосов
/ 25 ноября 2018

rand имеет два синтаксиса:

  • rand
  • rand EXPR

Если то, что следует, rand может быть началомвыражения (EXPR), Perl предполагает, что вы используете последнюю форму.

* может начинать EXPR, поэтому rand*... анализируется как rand EXPR.Это означает, что rand*100 эквивалентно rand(*100).

$ perl -MO=Deparse,-p -wle'print(rand*100)'
BEGIN { $^W = 1; }
BEGIN { $/ = "\n"; $\ = "\n"; }
print(rand(*100));
-e syntax OK

$ perl -wle'print(rand*100)'
Argument "*main::100" isn't numeric in rand at -e line 1.
0.57355563536203
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...