假设已安装好gnu smalltalk
进入gun stmalltalk交互环境非常简单,只需要
gst GNU Smalltalk ready st> |
很好,你已经进入了gst的交互环境。如果要退出,在新的一行输入ctrl+D
'Hello world' printNl
'hello,world'
'hello,world'
实际的程序只有一句
1 | 'Hello world' printNl |
但是为什么会有两个输出呢?其中的第一个便是我门要求的输出,而第二个是环境的返回值(snipped evaluated),我门可以在运行gst的时候在后面加上-V选项,这样会输出更详细的环境返回值。
gst -V GNU Smalltalk ready st> 'Hello world' printNl 'Hello world' 1426 byte codes executed which took 0.000 seconds (0.000s user+0.000s sys) 66 primitives, percent 4.63 self returns 2, inst var returns 0, literal returns 0 127 method cache lookups since last cleanup, percent 8.91 60 method cache hits, 67 misses, 47.24 percent hits returned value is 'Hello world' |
很容易发现,第二个返回值变得更加详细了。
了解完基本的操作,现在让我们来看看这句程序做了什么
'Hello world' printNl |
这句代码做了两件事. 1创建了一个包含了Hello world的字符串对象。2给字符串对象发送了一个名为printNl的消息。当对象处理完printNl消息后,我们得到了提示返回。你应当注意到这里没有提到任何如何输出字符串的细节,这是有意为之的:我们输入的代码并不知道任何关于输出的事情,它仅仅是创建了一个对象,然后给这个对象发送一个消息,这就是这句代码的全部。
为了更有趣一点。让我们看看当字符串对象接收到printNl消息时发生了什么。字符串对象回去查找一个表,看看那里可以接收指定的消息,从而决定运行什么代码。printNl对应的代码输出了字符串的内容。
输出数字
同样也可以把printNl消息发送到数字
-2.45e8 printNl |
不过这样怎么看也不想程序,仅仅只有一行。当然gst支持多行处理。
(-2.45e8 printNl) |
不过在交互模式下可能令人困惑,应为前面的prompt字符川没有发生任何变化。
(-2.45e8
printNl)
-2.45e8
printNl的用法就暂时说到这里,之后的代码中我们用gst自带的提示星系来了解输出就足够了。
gnu smalltalk中的数学计算
先看一个最简单的
7 + 8 |
返回值是15.数字型对象7获得一个+消息,这个消息有一个参数,这个参数是数字对象8。数字对象的+消息会创建一个新的数字对象15,然后向这个新的对象15发送printNl消息。于是,我们看到了输出结果。
可见数字运算在smalltalk里并不是一类特殊操作,和其他所有对象一样,仅仅是创建对象,发送消息。
这里有一些例子,可以帮助你的理解。
8 * (4 / 2) 8 - (4 + 1) 2/3 + 7 2 + 3 * 4 2 + (3 * 4) |
您必须登录才能发表评论。