7

我有大约 1800 行 GNU Smalltalk 代码,我想将其引入 Pharo。我已经开始按类、逐个选择器来做这件事,但这非常耗时且乏味。

有没有办法批量导入项目?我可以很容易地预先调整 GST 源文件的格式,vi使其更像 Pharo。

我考虑过的另一件事是复制一个“起始”.mcz文件,感受一下文件的格式source.st,然后source.st用 file cats 和vi. 但是还有一个snapshot.bin文件,其中似乎也有源代码,这使得这条道路变得艰难。似乎应该有一个更简单的方法。我已经用不同的短语搜索了它,但没有找到任何东西。

4

2 回答 2

8

将其放入 Monticello (.mcz) 格式对于迁移来说太过分了。只需将其转换为 fileout 格式 ( http://wiki.squeak.org/squeak/1105 ) 并通过 filein 将其加载到 Pharo 中,然后您可以根据需要使用 GUI 创建一个 Monticello 包。

查看文件输出格式涉及的快速方法(主要只是将“!”放在正确的位置):

  1. 加载 Pharo
  2. 打开浏览器
  3. 右键单击一个类,然后从菜单中选择“文件输出”
  4. 您应该在您启动 Pharo 的目录中看到一个名为 [Classname].st 的文件
于 2016-06-08T05:57:52.513 回答
3

假设您有两个类,LuckyClass1一个是 的子类Object,一个是 的子LuckyClass2LuckyClass1。假设你的名字是LuckyName。假设您想将代码放入包Lucky-Package1中。

Object subclass: #LuckyClass1
LuckyClass1 subclass: #LuckyClass2

LuckyClass1具有实例端方法、类luckyInstanceSideMethod1端方法luckyClassSideMethod1和实例端变量luckyInstanceSideVariable1和类端变量的类LuckyClassSideVariable1

类似地,类LuckyClass2具有实例端方法luckyInstanceSideMethod1、类端方法luckyClassSideMethod1和附加的实例端变量luckyInstanceSideVariable2和类端变量LuckyClassSideVariable2

方法引用看起来像这样

LuckyClass1>>#luckyInstanceSideMethod1
LuckyClass1 class>>#luckyClassSideMethod1
LuckyClass2>>#luckyInstanceSideMethod1
LuckyClass2 class>>#luckyClassSideMethod1

在 Linux/Mac OS X 上,执行

vi Lucky-Package1-unix.st

放入一个名为的Lucky-Package1-unix.st 文件

Object subclass: #LuckyClass1
    instanceVariableNames: 'luckyInstanceSideVariable1'
    classVariableNames: 'LuckyClassSideVariable1'
    poolDictionaries: ''
    category: 'Lucky-Package1'!

!LuckyClass1 methodsFor: 'lucky instance side protocol 1' stamp: 'LuckyName 6/8/2016 17:05'!
luckyInstanceSideMethod1
    ^ luckyInstanceSideVariable1 := 'lucky instance side'
! !

!LuckyClass1 class methodsFor: 'lucky class side protocol 1' stamp: 'LuckyName 6/8/2016 17:06'!
luckyClassSideMethod1
    ^ LuckyClassSideVariable1 := 'lucky class side'
! !

LuckyClass1 subclass: #LuckyClass2
    instanceVariableNames: 'luckyInstanceSideVariable2'
    classVariableNames: 'LuckyClassSideVariable2'
    poolDictionaries: ''
    category: 'Lucky-Package1'!

!LuckyClass2 methodsFor: 'lucky instance side protocol 1' stamp: 'LuckyName 6/8/2016 17:15'!
luckyInstanceSideMethod1
    ^ super luckyInstanceSideMethod1, ' subclass'
! !

!LuckyClass2 class methodsFor: 'lucky class side protocol 1' stamp: 'LuckyName 6/8/2016 17:17'!
luckyClassSideMethod1
    ^ super luckyClassSideMethod1, ' subclass'
! !

实际上,您可以剪切和粘贴前面的块。

然后将换行转换为回车,否则 Pharo 会抱怨。这个很重要。如果您在 Linux/Mac OS X 上,您可以使用以下

cat Lucky-Package1-unix.st | tr \\n \\r > Lucky-Package1-pharo.st

在 Windows 上,我仍然会使用来自 git-scm https://git-scm.com/download/win的 bash、vi、cat、tr

然后归档在Lucky-Package1-pharo.st. 它应该出现在Lucky-Package1系统浏览器的包中。

于 2016-06-08T16:03:06.597 回答