32

私は IO 2 日目の 7 日間で 7 つの言語という本の 2 番目の演習を完了しようとしています。その中で、「分母がゼロの場合、どのように変更しますか / 0 を返しますか?」と尋ねました。以下を使用して Number にメソッドを追加できると判断しました。

Number new_div := method(i, if(i != 0, self / i, 0))

わからないのは、演算子テーブルの「/」を置き換える方法です。私はもう試した:

Number / := Number new_div
Number / := self new_div

しかし、「/」を呼び出そうとしているため、両方に例外が発生します。古いメソッドへの参照を保存し、それを自分の目的のために再定義できるように、Number / のハンドルを取得するにはどうすればよいですか? 私はこれについてすべて間違っていますか?

4

3 に答える 3

40

Eric Hogueの場合(質問のコメントを参照):

origDiv := Number getSlot("/")

10 origDiv(5) println   # => 2
10 origDiv(0) println   # => inf

Number / := method (i, 
    if (i != 0, self origDiv(i), 0)
)

(10 / 5) println        # => 2
(10 / 0) println        # => 0
于 2010-11-24T12:09:56.513 に答える
4

再定義内で累乗演算子を使用した場合は、古い除算演算子への参照を保持する必要はありません。

Number / := method(i, if(i==0, 0, self*i**(-1)))
于 2011-04-08T01:43:33.097 に答える
4

あなたがしたいことは実行することです:

Number setSlot("/", Number getSlot("new_div")

例えば。

ただし、その定義を使用すると、無限ループが発生することに注意してnew_divください.メモリが不足しています。//new_div6 / 2

于 2010-11-23T23:45:06.047 に答える