不理解基本符号'|'

问题描述 投票:-1回答:2

我刚刚开始使用gnu-smalltalk。我从here获取了以下代码并尝试使用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

问题在哪里以及如何解决。谢谢你的帮助。

smalltalk gnu-smalltalk
2个回答
3
投票

这里的混淆是完整方法(函数)的定义之间的区别,其包括(在C中将是什么)方法/函数头和方法/函数体。标头是具有任何形式参数的方法的名称,而方法的主体是在调用方法时执行的代码。

在您的示例中,您正在复制一个完整的方法并执行它,就像它只是一个代码块一样。因此,在代码块开始时合法的东西不是开始的。编译器认为你是“发送消息#|”这是非法的。

如果省略方法名称(函数头),则代码块以垂直条(管道)开始,这是声明变量的合法语法。


1
投票

只需删除display_etc行,它就不属于代码。

© www.soinside.com 2019 - 2024. All rights reserved.