Не понимая основной символ '|' - PullRequest
0 голосов
/ 30 апреля 2019

Я только начинаю использовать gnu-smalltalk.Я взял следующий код из здесь и пытаюсь запустить его с помощью команды gst.

display_etc
   | pipe |
   pipe := FileStream popen: 'ls -l /etc' dir: FileStream read.        
   Transcript showCr: pipe contents. !   

Но выдает ошибку, что не понимает основной символ |:

$ gst dir_etc.st 
Object: nil error: did not understand #|
MessageNotUnderstood(Exception)>>signal (ExcHandling.st:254)
UndefinedObject(Object)>>doesNotUnderstand: #| (SysExcept.st:1448)
UndefinedObject>>executeStatements (dir_etc.st:2)
dir_etc.st:3: expected expression

Где проблема и как ее можно решить.Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

Путаница здесь - это различие между определением полного метода (функции), которое включает (что в C будет) заголовок метода / функции и тело метода / функции. Заголовок - это имя метода с любыми формальными параметрами, а тело метода - это код, который выполняется при вызове метода.

В вашем примере вы копируете полный метод и выполняете его, как если бы это был просто блок кода. Таким образом, то, что является законным в начале блока кода, не в начале. Компилятор считает, что вы «отправляете сообщение № |» что незаконно.

Если вы не укажете имя метода (заголовок функции), тогда блок кода начинается с вертикальной черты (трубы), что является допустимым синтаксисом для объявления переменных.

1 голос
/ 30 апреля 2019

Просто удалите строку display_etc, она не принадлежит коду.

...