我正在尝试在七天七语中的第二天完成第二次练习。在你的问题中,“如果分母为零,你会如何改变/返回0?”我已经确定我可以使用以下方法为Number添加方法:
Number new_div := method(i, if(i != 0, self / i, 0))
我不确定如何替换运算符表中的“/”。我试过了:
Number / := Number new_div
Number / := self new_div
但是当我试图调用“/”时,我得到两个例外。如何处理Number /所以我可以存储对旧方法的引用,然后为自己的目的重新定义它?我是不是错了?
答案 0 :(得分:39)
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
答案 1 :(得分:4)
您要做的是运行:
Number setSlot("/", Number getSlot("new_div")
例如。
然而,应该注意的是,如果你使用new_div
的定义,你手上会有一个无限循环,因为你在其中调用/
方法,并设置使用/
的{{1}}运算符会导致调用new_div
递归,直到内存不足为止。
答案 2 :(得分:4)
如果您在重新定义中使用了幂运算符,那么您不必保留对旧除法运算符的引用。
Number / := method(i, if(i==0, 0, self*i**(-1)))