【问题标题】:Not understanding basic symbol '|'不理解基本符号'|'
【发布时间】:2019-04-30 17:42:36
【问题描述】:

我刚刚开始使用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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我想创建一个函数然后执行它。我该怎么做?
    • 创建方法的过程会因Smalltalk的方言而异。我不熟悉这个。尝试在 Google 上搜索“gnu smalltalk 教程”。
    【解决方案2】:

    删除display_etc这行就行了,它不属于代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 2011-09-11
      • 2017-09-04
      • 2015-02-19
      • 2010-12-29
      相关资源
      最近更新 更多