我试图在我的作业中注释掉所有代码。但是,当我尝试编译(或者正在发生的任何事情;我真的不知道)时,尝试在引号内编译代码。根据我正在使用的书(“On to Smalltalk” - Winston),Smalltalk忽略了最初的双引号,这个双引号和下一个双引号之间的所有字符,最后它也忽略了下一个双引号。为什么这不起作用?
我已经尝试将整个代码放入一组双引号中,结果更糟糕。
我特意使用Smalltalk / X.我只是希望得到任何导致评论错误的帮助。
代码编译时出现的错误是:
===>解析器[错误]:未声明的变量:删除 在编译/评估UndefinedObject时 在阅读C:\ Users \ Discouraged \ Desktop \ blank.st时 在第3行或附近[相对于块开始]
===>解析器[错误]:未声明的变量:pop 在编译/评估UndefinedObject时 在阅读C:\ Users \ Discouraged \ Desktop \ blank.st时 在第4行或附近[相对于块开始]
===> “[”出乎意料。 (在它之前缺少“。”,“:”或选择器?) 在编译/评估UndefinedObject时 在阅读C:\ Users \ Discouraged \ Desktop \ blank.st时 在第5行或附近[相对于块开始]
===> String中意外的输入结束 在编译/评估> UndefinedObject时 在阅读C:\ Users \ Disouraged> \ Desktop \ blank.st时 在第1行或附近[相对于块开始]
代码:
"
Build a stack based (RPN - Reverse Polish Notation) calculator for rational
numbers
Smalltalk at: #maxStackSize put: 32
Object subclass: #Stack
instanceVariableNames: 'stackArray stackTop'
classVariableNames: ''
poolDictionaries: ''
!
Stack class comment: '
Redundant stack class
'
!
!Stack methodsFor: 'initialize'!
new
^ super new.
!
init
stackArray := Array new: maxStackSize.
stackTop := -1.
! !
"
"
!Stack class methodsFor: 'manipulating the stack'!
"
"
Removes the top entry from the stack.
pop
[self empty
ifTrue: [
Transcript
cr;
show: 'Stack is EMPTY!';
cr.]
ifFalse: [stackTop := stackTop - 1].
]
!
"
答案 0 :(得分:4)
您正在尝试使用fileout格式对Smalltalk进行编码,该格式用于记录和传输代码,而不是用于开发。所以难怪你很沮丧。您应该加载IDE并使用浏览器编写代码。 Smalltalk IDE是编码,测试和运行的宜人环境。
您的档案存在一些问题。例如,你不能嵌套注释(“s)。此外,你错过了一个尾随句点,有一些不匹配的注释引用,并且在一个字符串中包含一个!当它应该被转义为!!。这是一个更正的文件输出下方。
但最重要的是,加载IDE并使用它。您会发现使用IDE进行课堂作业会更加愉快。
"
Build a stack based (RPN - Reverse Polish Notation) calculator for rational
numbers
"
Smalltalk at: #maxStackSize put: 32.
Object subclass: #Stack
instanceVariableNames: 'stackArray stackTop'
classVariableNames: ''
poolDictionaries: ''
!
Stack class comment: '
Redundant stack class
'
!
!Stack methodsFor: 'initialize'!
new
^ super new.
!
init
stackArray := Array new: maxStackSize.
stackTop := -1.
! !
!Stack methodsFor: 'manipulating the stack'!
pop
"Removes the top entry from the stack."
self empty
ifTrue: [
Transcript
cr;
show: 'Stack is EMPTY!!';
cr.]
ifFalse: [stackTop := stackTop - 1].
!
答案 1 :(得分:0)
fileout格式基本上是一种传输格式,它使用未转义的刘海(!)作为记录分隔符。 “!” (中间有空格)是一个空记录。他们被双击“!!”逃脱- 没有空间。当这样的文件被归档时,它首先被分成这样的记录(语言不可知),然后由编译器分析。 因此,当在一个这样的记录中开始注释并在另一个记录中“结束”时,编译器只能获得半块编译并且会抱怨。
在ST / X文档中实际上有一些关于fileOut格式的文档,您应该阅读这些文档。
这就是为什么在外部编辑器中编辑chink-filout文件是一个坏主意的原因 - 你必须非常小心双重刘海并且不要破坏这个记录结构。
PS:我看到你的麻烦了,因为“stc”编译器(将ST转换为C)使用这种fileout格式作为输入。但是这个编译器用于编译归档代码(来自IDE)以进行最终部署,而不是用于开发。