On Feb 8, 6:03 pm, Marcin Raczkowski <mailing... / gmail.com> wrote: > Hello i remeber someone asking fif it's possible in Ruby - and i have no > idea if it was replyied, anyway i wanted to share my idea how to make > your own if/else/elsif :) > > class Object > def else > self > end > > def elsif(condition,&block) > self > end > > def if(condition,&block) > (!condition && Else) || (condition && block.call) > end > end > > class Else > def self.else(&block) > block.call > end > > def self.elsif(condition, &block) > self.if(condition, &block) > end > end > > and now we can do: > > irb(main):024:0> self.if(true){:true}.else{:false} > => :true > irb(main):025:0> self.if(false){:true}.else{:false} > => :false > irb(main):051:0> self.if(false){:true}.elsif(true){:true}.else{nil} > => :true > irb(main):052:0> self.if(false){:true}.elsif(false){:true}.else{nil} > => nil > irb(main):053:0> self.if(true){:ok}.elsif(true){:not_ok}.else{:not_ok} > => :ok > irb(main):056:0> self.if(false){:not_ok}.elsif(true){:ok}.else{:not_ok} > => :ok > > this aproach is elegant becouse even if object have method else or elif > or even if declared then it'll bahave as expected !!! > Also i didn't use any of old if/else statements, i didn't even use tri > argument operator (cond ? true : false), it's all implemented using > boolean logic!! > > Ok, now probably comes question - what we can do with it - of course - > create less boolean logic!!! > > module Fuzzy > def self.if(float, &block) > condition = rand <= float > (!condition && Else) || (condition && block.call) > end > end > > now we provide if function with float between 0 and 1 - which represents > probability of achieveing goal > > Fuzzy.if(0.99){puts "pretty standard stuff"}.else{puts "fuck man, you > really have luck"} > > with some luck (3th try for me) you can get something like this: > irb(main):097:0> 10.times{ Fuzzy.if(0.99){puts "pretty standard > stuff"}.else{puts "fuck man, you really have luck"} } > pretty standard stuff > pretty standard stuff > pretty standard stuff > pretty standard stuff > fuck man, you really have luck > pretty standard stuff > pretty standard stuff > pretty standard stuff > pretty standard stuff > pretty standard stuff > => 10 > > What else - of course this way you can do random mutations in genetic > algorithms, of course there's other ways to achieve that - but this one > is fun :D > > currently there's only one problem with this: > > irb(main):099:0> self.if(false){:not_ok} > => Else I bet you could fix that with lazy evaluation. T.