Io lanuage是一门原型语言,没有类和对象之分。首字母大写的对象表示它是一个单独的type;小写的对象表示它的type是由父对象决定的,或者说它是父对象的一个“实例”。
强类型: 1+ "1"是不合法的。但变量无需显式声明类型;也可以赋值为其他的类型。
操作符: :=, =的区别:前者无论槽是否已存在都可以成功赋值;后者当槽不存在时会抛出异常。
io的一切都是消息。通过method(arg1, arg2, ...argN).的方式来定义一个method。返回值是这个method本身。对method对象发送call消息,即可调用方法。定义的方法中,最后一个参数是方法体,之前的参数是形参。
在method中,可以使用call槽来获取本次调用的信息,包括消息的发送者、接收者、消息本身。对于消息对象,使用doMessage(message)可以执行消息。使用call message arguments可以得到参数的数组。 想要将method抓取出来,可以使用Object getSlot("slotName")的方式获得method对象而不执行。
覆盖forward槽就可以修改当方法不存在时的执行代码。类似method_missing.结合call message等可以实现元编程或构建DSL。
使用list(1,2,3)这种形式构建列表,而不是大写的List。大写的List只会返回空列表。对于列表调用foreach(i, dosth)可以遍历列表。
OperatorTable槽可以返回运算符列表。