Smalltalk中的简单类定义错误

时间:2019-05-02 05:21:23

标签: smalltalk smalltalkx

我正在尝试与smalltalk/x-jv branch一起使用Smalltalk。我有以下简单代码:

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)

问题出在哪里,如何解决?感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

编辑-添加有关stcstx

的信息

恐怕您不能直接在Smalltalk / X(-jv分支)中使用GNU Smalltalk代码。同样很高兴看到您在Smalltalk问题系列中的最终目标是什么。

对于您来说重要的是,如果要构建应用程序,则应使用提供的IDE,Smalltalk被设计为可在IDE中运行。如果您想构建一个示例应用程序,甚至对于Smalltalk / X来说,该应用程序甚至还有guide。当然,这并不意味着您无法从命令行启动脚本(Smalltalk / X在shell上功能强大)。

话虽这么说,我自己在BitBucket上托管了一个 Sublime Text 3 Smalltalk/X highlighting打包文件。我主要是为Smalltalk及其嵌入式C高亮创建的。

首先,您可能正在使用stx可执行文件,而不是stcstcsmalltalk-to-C 编译器的捷径。 stc生成 C代码,然后可以由 C编译器将其编译为目标文件,然后可以将其为与最终的可执行(以及其他smalltalk类和运行时)链接

smalltalkstx是一个启动程序,可以执行Smalltalk脚本或打开完整的IDE。如果您熟悉Java,请考虑stc起的javacsmalltalk起的stxjava

您可以使用提供的名为smalltalk的启动器(bash脚本,用于* nix,用于Windows的batch / powershell),最后使用了stx.com,但提供了一些附加功能。 / p>

使用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中创建类并对其进行fileOut处理。然后,您将看到.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

如果要编写不带“对象”的脚本(所有内容在Smalltalk中都是对象,但是您在此处未定义类),则可以执行简单的transcript.st

| mainValue |

mainValue := 555.
Transcript showCR: mainValue.

再次将其执行为:smalltalk --execute transcript.st,以获得相同的结果。