Smalltalk异域风情

Ser*_*Oan 4 smalltalk

当你来自一个更像C语法的语法世界时,Smalltalk语法(和特性)可以被发现非常奇特(甚至令人不安).我发现自己失去了一些时间,
我会有兴趣学习知道你发现真正的异国情调与更经典/主流语言相比,你认为有助于理解语言.

例如,使用逻辑运算符进行评估:

  • (object1 = object2) & (object3 = object4) :这将评估整个表达式,即使左边部分为假,其余部分也将被评估.
  • (object1 = object2) and: [object3 = object4] :这将评估左侧部分,只有在第一个为真的情况下才会评估右侧部分.

Fra*_*rar 10

一切都是一个对象,虚拟机上方的所有东西都可用于检查和修改.(至少在概念上,基元是虚拟机的一部分.)即使你的调用堆栈可用(thisContext) - Seaside通过简单地将调用堆栈调入流中并通过简单地恢复它(返回到延续)来实现当天的延续从该流中读出激活帧!

您可以从字符串构造一个选择器并将其转换为a Symbol并将其作为消息发送:self perform: 'this', 'That'将执行相同的操作self thisThat.(但是不要这样做,出于同样的原因,你应该避免eval使用Lisps和PHP:很难调试!)

消息传递:它不是方法调用!

#become:对于之前没见过的人来说,这可能有点震撼.(tl; dr批量交换两个对象指针 - 所有对B的引用现在都指向A,所有对A的引用现在都指向B)