「 7週間の7つの言語」という本には質問があります。
分母がゼロの場合、どのように/を変更して0を返しますか?
スレッドのおかげでメソッド内の自己の重要性は何ですか?私には実用的な解決策がありますが、Number "/"メソッドを壊さずに、代わりにNumberをサブクラス化することを試みたかったのです。これが私が試したことです:
Zeroable := Number clone
Zeroable / = method(denom, if(denom == 0, 0, self proto / denom))
ただし、これは機能しません。Zeroableのインスタンスをインスタンス化しようとすると、数値のように動作します。
Io> ten := Zeroable 10
==> 10
Io> ten type
==> Number
Io> ten / 5
==> 2
Io> ten / 0
==> inf
Io> ten slotNames
==> list()
Zeroableを「通常の」方法でインスタンス化した場合、値は常に0であり、変更する方法がないようです。
Io> zero := Zeroable clone
==> 0
Io> zero type
==> Zeroable
Io> zero / 0
==> 0
Io> zero / 2
==> 0
問題はインスタンス化される方法だと思いますがten
、クローンメソッドに「引数」を渡す方法や、0ではないZeroableを作成する方法がわかりません。ここで何が起こっているのでしょうか。