我正在尝试通过学习来学习Smalltalk,因此我通过建立一个简单的“Matrix”类来掌握语法和样式。

首先,如果链接到一个很好的Smalltak教程(尽管这是完全可选的),我将不胜感激,最好是不涉及使用GUI的教程(我宁愿键入.st而不是在层次结构浏览器中钓鱼来将方法放在适当的位置)。

然后,在TDD上:对于这个项目,我叫gst-sunit -f matrix.st -f matrix-test.st BaseMatrixTests,肯定有比这更好的方法。 在吗?

最后,关于断言:我试图编写一个方法并将断言放入其中,例如:

Matrix>>multiplyBy: anotherMatrix [
    [ self isNotEmpty ] assert.
    "Do Multiplication"
    [ result dimensions = (self height)@(anotherMatrix width) ] assert.
]

我该怎么做断言?

编辑:明确标记的问题。

最佳答案

好,这里有几块。

首先,我同意markusQ,尽管我完全同情:我希望能够直接在EMACS中编写代码。关于Smalltalk的事情之一是,对于不想做Smalltalk Way的人来说,这确实是非常宽容的。在这种情况下,Smalltalk方式是使用浏览器。

其次,这是Smalltalk方式的部分原因是,Smalltalk在很多方面都不像其他语言。出于所有实际目的,实际上没有办法制作“单独的” Smalltalk可执行文件:您所要做的就是制作一个Smalltalk镜像,并在其中添加一些自己的代码的相对较小的片段。使用外部编辑器编写代码时,就像您显示的语法一样,您实际上只是手动输入一种导入/导出格式,这种格式比XML手工输入要容易一些。但只有一点点。

道德是用浏览器以Smalltalk方式进行。

对于Smalltalk,有一些相当不错的教程。我通常使用Squeak,所以我所见的都是使用Squeak,即here

在TDD上,您很幸运,因为Smalltalk是第一个获得xUnit的地方。对于Smalltalk,它称为SUnit,并且有一个很好的教程here

您使用的断言似乎基本上是“按契约(Contract)设计”的方法。已经完成了按契约(Contract)将设计添加为here到Smalltalk的工作。对于简单的断言,您可以像this SO question中一样添加代码。

assert: aBlock
    "Throw an assertion error if aBlock does not evaluates to true."
    aBlock value
        ifFalse: [AssertionFailure signal: 'Assertion failed']

10-05 20:55
查看更多