smalltalk 中的简单 class 定义错误
Simple class definition error in smalltalk
我正在尝试将 smalltalk 与 smalltalk/x-jv branch 一起使用。我有以下简单代码:
Object subclass: Myclass[
|mainval|
init [mainval := 555]
getmainval [^mainval]
]
gc := Myclass new.
gc init.
gc getmainval printNl.
我正在尝试使用 smalltalk/x-jv 的 stc
命令在命令行上 运行 它,但它不起作用。以下是错误:
$ ./stc testsrc.st
testsrc.st, line 1: Error: syntax error in 'class definition' near "Myclass" (char/token=286 / 0x11e) (fileIn expression)
问题出在哪里,如何解决?感谢您的帮助。
编辑 - 添加有关 stc
和 stx
的信息
恐怕您不能在 Smalltalk/X(-jv 分支)中直接使用 GNU Smalltalk 代码。另外,很高兴看到您在 Smalltalk 问题系列中的最终目标是什么。
了解 Smalltalk 被设计为在 IDE 中工作对您来说很重要,如果您想构建一个应用程序,您应该使用提供的 IDE。如果你想构建一个示例应用程序,甚至 guide Smalltalk/X。当然,这并不意味着您无法从命令行启动脚本(Smalltalk/X 比 shell 更强大)。
也就是说,我在 BitBucket 上托管了 Sublime Text 3 的 Smalltalk/X highlighting 包文件。我创建它主要是为了 Smalltalk 及其嵌入式 C 突出显示。
首先,您可能正在使用 stx
可执行文件而不是 stc
。 stc
是 smalltalk-to-C
编译器 的快捷方式。 stc
生成 C 代码,然后可以由 C 编译器 编译成 目标文件 然后可以 链接 与最终 可执行文件 (连同其他 smalltalk classes 和 运行time) .
smalltalk
或 stx
是一个可以执行 smalltalk 脚本或打开成熟的 IDE 的启动器。如果您熟悉 Java,请将 stc
视为 javac
,将 smalltalk
或 stx
视为 java
。
您可以使用提供的名为 smalltalk
的启动器(*nix 的 bash 脚本和 windows 的 batch/powershell 脚本),它使用 stx.com
最后,但提供了一些额外的功能。
使用 smalltalk --help
查看命令行选项。
首先,我将从一个简单的单线开始,您可以使用它:
stx.com -I --quick --eval "Transcript showCR: 'A message on stdout on Transcript'
A message on stdout on Transcript
关于 windows 如果你使用 smalltalk
你会得到更多信息:
smalltalk -I --quick --eval "Transcript showCR: 'A message on stdout on Transcript'
"[INFO] PowerShell detected: ->TRUE<-.
"[INFO] The latest latest_powershell_version found: 5.1.16299.1004."
"[INFO] With the runtime being: v4.0.30319."
VERBOSE: [INFO] Manual switch detected - configuration is ignored
VERBOSE: [INFO] Executing asynchronously command: C:\prg_sdk\stx8-jv_swing\build\stx\projects\smalltalk\stx.com -I
--quick --eval "Transcript showCR: 'A message on stdout on Transcript'" | Out-null
VERBOSE: A message on stdout on Transcript
VERBOSE:
VERBOSE: [INFO] Exiting from PowerShell with code 0
VERBOSE: [INFO] End. Exiting correctly.
现在让我们转到您的脚本问题
一开始最好的方法是在IDE中创建class并从中创建一个文件。然后您将看到 .st
文件应具有的正确结构。
我已经为您创建了一个简单的文件 script.st
(这与您从 IDE 的 fileOut 中获得的内容类似):
"{ NameSpace: Smalltalk }"
Object subclass:#MyClass
instanceVariableNames:'mainValue'
classVariableNames:''
poolDictionaries:''
category:''
!
!MyClass methodsFor:'accessing'!
mainValue
^ mainValue
!
mainValue: newValue
mainValue := newValue
! !
!MyClass methodsFor:'initialization & release'!
initialize
super initialize.
mainValue := 555.
! !
gc := MyClass new.
gc initialize.
Transcript showCR: gc mainValue.
你怎么运行这样的脚本?
smalltalk --execute script.st
输出将是:555
如果你想在没有 "objects" 的情况下编写脚本(在 Smalltalk 中一切都是对象,但你没有在这里定义 class)你可以做简单的 transcript.st
:
| mainValue |
mainValue := 555.
Transcript showCR: mainValue.
再次按以下方式执行:smalltalk --execute transcript.st
以获得相同的结果。
我正在尝试将 smalltalk 与 smalltalk/x-jv branch 一起使用。我有以下简单代码:
Object subclass: Myclass[
|mainval|
init [mainval := 555]
getmainval [^mainval]
]
gc := Myclass new.
gc init.
gc getmainval printNl.
我正在尝试使用 smalltalk/x-jv 的 stc
命令在命令行上 运行 它,但它不起作用。以下是错误:
$ ./stc testsrc.st
testsrc.st, line 1: Error: syntax error in 'class definition' near "Myclass" (char/token=286 / 0x11e) (fileIn expression)
问题出在哪里,如何解决?感谢您的帮助。
编辑 - 添加有关 stc
和 stx
恐怕您不能在 Smalltalk/X(-jv 分支)中直接使用 GNU Smalltalk 代码。另外,很高兴看到您在 Smalltalk 问题系列中的最终目标是什么。
了解 Smalltalk 被设计为在 IDE 中工作对您来说很重要,如果您想构建一个应用程序,您应该使用提供的 IDE。如果你想构建一个示例应用程序,甚至 guide Smalltalk/X。当然,这并不意味着您无法从命令行启动脚本(Smalltalk/X 比 shell 更强大)。
也就是说,我在 BitBucket 上托管了 Sublime Text 3 的 Smalltalk/X highlighting 包文件。我创建它主要是为了 Smalltalk 及其嵌入式 C 突出显示。
首先,您可能正在使用 stx
可执行文件而不是 stc
。 stc
是 smalltalk-to-C
编译器 的快捷方式。 stc
生成 C 代码,然后可以由 C 编译器 编译成 目标文件 然后可以 链接 与最终 可执行文件 (连同其他 smalltalk classes 和 运行time) .
smalltalk
或 stx
是一个可以执行 smalltalk 脚本或打开成熟的 IDE 的启动器。如果您熟悉 Java,请将 stc
视为 javac
,将 smalltalk
或 stx
视为 java
。
您可以使用提供的名为 smalltalk
的启动器(*nix 的 bash 脚本和 windows 的 batch/powershell 脚本),它使用 stx.com
最后,但提供了一些额外的功能。
使用 smalltalk --help
查看命令行选项。
首先,我将从一个简单的单线开始,您可以使用它:
stx.com -I --quick --eval "Transcript showCR: 'A message on stdout on Transcript'
A message on stdout on Transcript
关于 windows 如果你使用 smalltalk
你会得到更多信息:
smalltalk -I --quick --eval "Transcript showCR: 'A message on stdout on Transcript'
"[INFO] PowerShell detected: ->TRUE<-.
"[INFO] The latest latest_powershell_version found: 5.1.16299.1004."
"[INFO] With the runtime being: v4.0.30319."
VERBOSE: [INFO] Manual switch detected - configuration is ignored
VERBOSE: [INFO] Executing asynchronously command: C:\prg_sdk\stx8-jv_swing\build\stx\projects\smalltalk\stx.com -I
--quick --eval "Transcript showCR: 'A message on stdout on Transcript'" | Out-null
VERBOSE: A message on stdout on Transcript
VERBOSE:
VERBOSE: [INFO] Exiting from PowerShell with code 0
VERBOSE: [INFO] End. Exiting correctly.
现在让我们转到您的脚本问题
一开始最好的方法是在IDE中创建class并从中创建一个文件。然后您将看到 .st
文件应具有的正确结构。
我已经为您创建了一个简单的文件 script.st
(这与您从 IDE 的 fileOut 中获得的内容类似):
"{ NameSpace: Smalltalk }"
Object subclass:#MyClass
instanceVariableNames:'mainValue'
classVariableNames:''
poolDictionaries:''
category:''
!
!MyClass methodsFor:'accessing'!
mainValue
^ mainValue
!
mainValue: newValue
mainValue := newValue
! !
!MyClass methodsFor:'initialization & release'!
initialize
super initialize.
mainValue := 555.
! !
gc := MyClass new.
gc initialize.
Transcript showCR: gc mainValue.
你怎么运行这样的脚本?
smalltalk --execute script.st
输出将是:555
如果你想在没有 "objects" 的情况下编写脚本(在 Smalltalk 中一切都是对象,但你没有在这里定义 class)你可以做简单的 transcript.st
:
| mainValue |
mainValue := 555.
Transcript showCR: mainValue.
再次按以下方式执行:smalltalk --execute transcript.st
以获得相同的结果。