我正在努力学习Smalltalk,所以我通过建立一个简单的"Matrix"类来掌握语法和风格.
首先,如果链接到一个好的Smalltak教程(尽管这完全是可选的),我将不胜感激,最好不要使用GUI(我宁愿输入我的.st
s而不是层次结构浏览器中的鱼来放置)他们所处的方法).
然后,关于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,就像这里一样.
在TDD上,你很幸运,因为Smalltalk是第一个获得xUnit的地方.对于Smalltalk中,它被称为苏尼特,并有一个很好的教程在这里.
你在那里使用断言似乎基本上是"按合同设计"的方法.已经完成了通过合同向Smalltalk添加设计的工作,就像这里一样.对于简单的断言,您可以在此SO问题中添加代码.
assert: aBlock "Throw an assertion error if aBlock does not evaluates to true." aBlock value ifFalse: [AssertionFailure signal: 'Assertion failed']
我讨厌说(因为你明确表示你不想听到它),但进入IDE.试图在不使用IDE的情况下让你的头脑转向smalltalk,就像去巴黎吃麦当劳一样.当然,你在巴黎,但你并没有真正让自己暴露于它的全部.
关于smalltalk的关键是它是所有对象.一直向下(整数和字符是对象)和一直向上(类,方法,浏览器,IDE本身)都是对象.如果你坚持打击它,你将拥有与想要学习如何通过拖放来写C的运气一样多的运气.
如果您下载了Cincom Smalltalk Non-Commercial,则有许多在线教程.从这里开始:
http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=tutorials
如果您下载了Squeak,请从这里开始:
http://wiki.squeak.org/squeak/792
是的,您确实需要使用IDE与Smalltalk一起有效地工作.
在测试时,加载SUnit.在Cincom Smalltalk中,它是一个可加载的组件; 我已经介绍了在上面链接的视频教程中加载(和使用)它.我不完全确定如何为Squeak加载它,或者它是否是那里的基础的一部分,但它肯定可用于它.