gpt4 book ai didi

smalltalk - Smalltalk 中的简单类定义错误

转载 作者:行者123 更新时间:2023-12-02 11:26:04 26 4
gpt4 key购买 nike

我正在尝试使用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)

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

最佳答案

编辑 - 添加有关 stcstx 的信息

恐怕您无法直接在 Smalltalk/X(-jv 分支)中使用 GNU Smalltalk 代码。另外,如果您能在 Smalltalk 问题系列中了解您的最终目标是什么,那就太好了。

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

话虽这么说,有一个 Smalltalk/X highlighting由我自己在 BitBucket 托管的 Sublime Text 3 包文件。我创建它主要是为了 Smalltalk 及其嵌入式 C 突出显示。

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

smalltalkstx 是一个启动器,可以执行 Smalltalk 脚本或打开成熟的 IDE。如果您熟悉 Java,请将 stc 视为 javacsmalltalkstx 视为 >java.

您可以使用名为 smalltalk 的启动器(*nix 的 bash 脚本和 Windows 的批处理/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 中创建类并对其执行 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 --executetranscript.st以获得相同的结果。

关于smalltalk - Smalltalk 中的简单类定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com