我正在完成Seven Languages in Seven Weeks(“香肠之王”)第3章的第3章。我直接从书中复制了代码,但它没有用。
Io 20110905
向OperatorTable添加一个新操作符。
Io> OperatorTable addOperator("xor", 11)
==> OperatorTable_0x336040:
Operators
0 ? @ @@
1 **
2 % * /
3 + -
4 << >>
5 < <= > >=
6 != ==
7 &
8 ^
9 |
10 && and
11 or xor ||
12 ..
13 %= &= *= += -= /= <<= >>= ^= |=
14 return
Assign Operators
::= newSlot
:= setSlot
= updateSlot
To add a new operator: OperatorTable addOperator("+", 4) and implement the + message.
To add a new assign operator: OperatorTable addAssignOperator("=", "updateSlot") and implement the updateSlot message.
输出确认它已在插槽11中添加。现在让我们确保true还没有定义xor方法。
Io> true slotNames
==> list(not, asString, asSimpleString, type, else, ifFalse, ifTrue, then, or, elseif, clone, justSerialized)
没有。所以让我们创造它。
Io> true xor := method(bool if(bool, false, true))
==> method(
bool if(bool, false, true)
)
还有一个也是假的。
Io> false xor := method(bool if(bool, true, false))
==> method(
bool if(bool, true, false)
)
现在检查是否添加了xor运算符。
Io> true slotNames
==> list(not, asString, asSimpleString, type, else, xor, ifFalse, ifTrue, then, or, elseif, clone, justSerialized)
大。我们可以用吗? (同样,这段代码直接来自本书。)
Io> true xor true
Exception: true does not respond to 'bool'
---------
true bool Command Line 1
true xor Command Line 1
没有。而且我不确定“对'bool'的回应是什么意思”。
答案 0 :(得分:6)
您已经忘记了逗号,并定义了一个无参数的方法,其第一条消息是bool
- true
(在其上调用它)与之无关。你想做的是
true xor := method(bool, if(bool, false, true))
// ^
// or much simpler:
false xor := true xor := method(bool, self != bool)
// or maybe even
false xor := true xor := getSlot("!=")
// or, so that it works on all values:
Object xor := getSlot("!=")