如何在Io中定义xor运算符

时间:2014-12-12 13:53:02

标签: xor iolanguage

我正在完成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'的回应是什么意思”。

1 个答案:

答案 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("!=")