Overwriting "if"

M

Matthew Rudy

I want to overwrite if,
but it doesn't seem to work.

module Kernel
def if(arg)
yield
end
end

def if(arg)
yield
end

doesn't seem to work.
I know I could define my own if,
but it seems like ruby, being so dynamic, should be capable of this.

Any amusing suggestions on how to implement this will be much welcomed.

MatthewRudy
 
D

Daniel Lucraft

Matthew said:
I want to overwrite if,
Any amusing suggestions on how to implement this will be much welcomed.

MatthewRudy

Be like Smalltalk!

irb> class Object
irb> def if
irb> if self
irb> yield
irb> end
irb> end
irb> end
=> nil

irb> (4==4).if { p :true }
:true
=> nil
irb> (4==6).if { p :true }
=> nil

irb> class Object
irb> def if(blocks)
irb> if self
irb> blocks[:then].call
irb> else
irb* blocks[:else].call
irb> end
irb> end
irb> end
=> nil

irb> (4==4).if :then => lambda { p :true }, :else => lambda { p :false }
:true
=> nil
irb> (4==6).if :then => lambda { p :true }, :else => lambda { p :false }
:false
=> nil
irb>


Be like Arc!!

irb> alias fn lambda
=> nil
irb> (4==6).if :then => fn { p :true }, :else => fn { p :false }
:false
=> nil
 
M

Matthew Rudy

that's cool,
but can we not redefine the default "if"
so that the following code will work

if false
return "false is true"
end

without resorting to calling a method on a class / instance / module
explicitly

I'm thinking that intead we can overwrite the evaluation of False and
NilClass
?


Daniel said:
Be like Smalltalk!
irb> (4==4).if { p :true }
:true
=> nil
irb> (4==6).if { p :true }
=> nil
 
R

Ronald Fischer

I want to overwrite if,
but it doesn't seem to work.
=20
module Kernel
def if(arg)
yield
end
end
=20
def if(arg)
yield
end
=20
doesn't seem to work.
I know I could define my own if,
but it seems like ruby, being so dynamic, should be capable of this.

Of course this is something we really need in Ruby ;-)

This reminds me on the following, valid (and at its time popular),=20
PL/1 code:

IF IF=3DTHEN
THEN THEN=3DELSE
ELSE ELSE=3DIF;

Ronald
--=20
Ronald Fischer <[email protected]>
Phone: +49-89-452133-162
 
D

Daniel Lucraft

Matthew said:
that's cool,
but can we not redefine the default "if"

Don't think so: 'if' is a keyword. You'll never get it to look for a
method called 'if' without rewriting the interpreter.
if false
return "false is true"
end

Is there a reason for all this or are you just amusing yourself? :)

Dan
 
M

Matthew Rudy

just for fun
:)

if only keywords could be overwritten.
I guess I could just rebuild the parser.

anyway,
thanks for your suggestions,
back to work

Mj
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top