2016-02-17 3 views
3

Так я обнаружил, что писать, если заявление со скобками в Perl 6 результатов в нем бросали эту ошибку у меня:Слово 'if' интерпретируется как вызов функции if() '. Паренс не позволил

===SORRY!=== 
Word 'if' interpreted as 'if()' function call; please use whitespace instead of parens 
at C:/test.p6:8 
------> if<HERE>(True) { 
Unexpected block in infix position (two terms in a row) 
at C:/test.p6:8 
------> if(True)<HERE> { 

Это заставляет меня предположить, что существует какая-то if() функции? Однако создание и запуск сценария с if(); в нем производит следующее сообщение об ошибке компилятора:

===SORRY!=== 
Undeclared routine: 
    if used at line 15 

Так как то, что сделка?

Я читал здесь https://en.wikibooks.org/wiki/Perl_6_Programming/Control_Structures#if.2Funless, что parens необязательны, но это, похоже, не для меня.

Мои инструкции if работают без парнеров, просто удивляясь, почему это мешает мне использовать их или почему это будет думать, что if является подпрограммой из-за них.

EDIT: Хорошо, я немного глупый ... похоже, что я не читал достаточно хорошо по ссылке, которую я связывал, поэтому я предполагаю, что вы в замешательстве. Ссылку я связывал указывает следующее, который был в основном то, что я спрашивал:

if($x > 5) { # Calls subroutine "if" 
} 

if ($x > 5) { # An if conditional 
} 

Я принял ответ ниже, как она дает некоторое представление.

ответ

3

Вы уверены, что создали sub с именем 'if'? Если это так, (каламбур не предназначен), вы получаете ключевое слово, если вы используете пробел после литерального «if», иначе вы получите свою предварительно объявленную функцию, если вы используете парс после литерала «if» - то есть, если ваше использование термин выглядит как вызов функции - и вы объявили такую ​​функцию - она ​​назовет ее;

[email protected]:~$ perl6 
> sub if(Str $s) { say "if sub says: arg = $s" }; 
sub if (Str $s) { #`(Sub|95001528) ... } 
> if "Hello World"; 
===SORRY!=== Error while compiling <unknown file> 
Missing block 
at <unknown file>:1 
------> if "Hello World"⏏; 
    expecting any of: 
     block or pointy block 
> if("Hello World"); 
if sub says: arg = Hello World 
> 
> if 12 < 16 { say "Excellent!" } 
Excellent! 
> 

Вы можете видеть выше, я объявила функцию, называемую «если».

if "Hello World"; ошибки как пробел означает, что я использую ключевое слово, и поэтому у нас есть синтаксическая ошибка при попытке использовать ключевое слово if.

if("Hello World") успешно вызывает предварительно объявленную функцию.

if 12 < 18 { say "Excellent!" } работает правильно, так как пространство означает, что «если» интерпретируется как ключевое слово, и на этот раз отсутствует синтаксическая ошибка.

Итак, вы уверены, что имеете (или лучше - можете вставить здесь) свою предварительно объявленную функцию «если»?

Ссылка для ключевых слов и пробелов (которые взаимодействуют между прочим использует ключевое слово «если» в качестве примера!) Здесь: SO2 - Keywords and whitespace

+0

Я не пытался создать подпрограмму с именем 'if', я пытался использовать ключевое слово 'if', как интерпретируемое как ключевое слово, за исключением скобок. Как в 'if (True) {#do something}' в отличие от 'if True {#do somethin}'. Проблема в том, что Perl 6, похоже, не позволяет мне, потому что думает, что я пытаюсь вызвать функцию, называемую 'if', хотя, очевидно, ее не существует. Мой вопрос в основном сводится к **. Может ли Perl 6 использовать скобки, чтобы окружить оператор if или всегда будет предполагать, что вы пытаетесь вызвать функцию? ** – Phyreprooph

+2

Я вижу. Я не хочу быть педантичным, но в вашем последнем вопросе, я думаю, вы имеете в виду «... окружать условие if *», а не «... if * statement *».Ответ «да», вы можете окружить свое условие скобками, но там __must__ быть пробелом между ключевым словом и заключенным в скобки условием. Первые два предложения этой ссылки выше; «Еще одно место, где пробел имеет значение, - это разные ключевые слова, такие как поток управления или другие ключевые слова, ориентированные на операторы. Такие ключевые слова требуют пробела после них. + – Marty

+2

@Phyreprooph Вам нужно пространство после ключевого слова if –

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