在 gst(GNU smalltalk)中使用扩展 类?

Using extended classes in gst (GNU smalltalk)?

这是 的一个后续问题。

说我已经设法用新方法 'square' 扩展了 Integer class。现在我想用它。

从文件中调用新方法很简单:

Integer extend [
    square [
        | r |
        r := self * self.
        ^r
    ]
]

x := 5 square.
x printNl.

在这里,我可以在 bash 中调用 $ gst myprogram.st,它会打印 25。但是如果我想使用 GNU smalltalk 应用程序内部的方法怎么办?像这样:

$ gst
st> 5 square
25
st>

这可能与图像有关,我不确定。 This tutorial 说我可以编辑 ~/.st/kernel/Builtins.st 文件来编辑加载到内核中的文件,但我没有这样的文件。

我不会编辑加载到内核中的内容。为了详细说明我的评论,除了使用图像文件之外,将以前创建的文件加载到 GNU Smalltalk 环境中的一种方法是使用 packages.

示例 package.xml 文件,根据文档定义包,如下所示:

<package>
  <name>MyPackage</name>

  <!-- Include any prerequisite packages here, if you need them -->
  <prereq>PrequisitePackageName</prereq>

  <filein>Foo.st</filein>
  <filein>Bar.st</filein>
</package>

用于构建包的示例 Makefile 可能如下所示:

# MyPackage makefile
#
PACKAGE_DIR = ~/.st
PACKAGE_SPEC = package.xml
PACKAGE_FILE = $(PACKAGE_DIR)/MyPackage.star
PACKAGE_SRC = \
        Foo.st \
        Bar.st

$(PACKAGE_FILE):        $(PACKAGE_SRC) $(PACKAGE_SPEC)
        gst-package -t ~/.st $(PACKAGE_SPEC)

在您的工作目录中包含 Foo.stBar.st 的上述文件,您可以执行 make,它将构建 .star 包文件并将其放入在 ~/.st 中(其中 gst 将首先查找包裹)。当您 运行 您的环境时,您可以使用 PackageLoader 将其加载到:

$ gst
GNU Smalltalk ready

st> PackageLoader fileInPackage: 'MyPackage'
Loading package PrerequisitePackage
Loading package MyPackage
PackageLoader
st>

那么您就可以开始摇滚了...:)