Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you replace existing operators without invoking them in Io?

I’m trying to complete the second exercise on IO day 2 in the book Seven Languages in Seven Days. In it your asked, “How would you change / to return 0 if the denominator is zero?” I've determined that I can add a method to Number using:

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

What I’m not sure is how to replace the ”/” in the operator table. I’ve tried:

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

But I get an exception to both as it’s trying to invoke ”/”. How do I get a handle on Number / so I can store a reference to the old method and then redefine it for my own purposes? Am I going about this all wrong?

like image 918
Mark B Avatar asked Nov 23 '10 23:11

Mark B


1 Answers

For Eric Hogue (see question comments):

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 
like image 134
draegtun Avatar answered Sep 30 '22 19:09

draegtun