1

这是这个问题的一个后续问题。

假设我已经设法使用新方法“square”扩展了 Integer 类。现在我想使用它。

从文件中调用新方法很容易:

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

x := 5 square.
x printNl.

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

$ gst
st> 5 square
25
st>

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

4

1 回答 1

3

我不会编辑加载到内核中的内容。为了详细说明我的评论,除了使用图像文件之外,将先前创建的文件加载到 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.st使用包含and的工作目录中的上述文件Bar.st,您可以执行 a make,它将构建.star包文件并将其放入~/.stgst将在哪里寻找包作为第一个查找的地方)。当你运行你的环境时,你可以使用PackageLoader它来加载它:

$ gst
GNU Smalltalk ready

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

然后你就可以开始摇滚了...... :)

于 2016-05-06T16:01:12.377 回答