Onze dagmethode #2: Numeric#in

Geplaatst door Michiel de Mare wo, 06 feb 2008 06:27:00 GMT

De meeste web-applicaties lijken niet veel met random getallen van doen te hebben, online-pokersites natuurlijk uitgezonderd (hoop ik), maar toch komen ze verbazend veel van pas. Daarom introduceer ik vandaag een nieuwe notatie voor kans.


# het kan natuurlijk zo:
redirect_to home_url if rand < 0.2222

# dit is al beter
redirect_to home_url if rand(9) < 2

# maar niet zo mooi als dit
redirect_to home_url if 2.in 9

# de code
class Numeric 
  def in(other)
    rand(other) < self
  end
end

Recommend Michiel de Mare

Geplaatst in ,  | 5 reacties

Reacties

  1. p3t0r zei ongeveer 3 uur later:

    Hmm.. ik blijf even zeuren over naamgeving hoor ;)

    in… waarom verwacht ik dan zoiets te kunnen doen:

    5.in? 1..8

    Oftewel include? van de andere kant? Zoiets dus:

    class Numeric
      def in?(range)
        if range.respond_to?(:include?)
          return range.include?(self)
        else
          raise "objects passed to in should respond_to :include?" 
        end
      end
    end
    
    puts 5.in?(2..7)
    => true
    
  2. RemVee zei ongeveer 3 uur later:

    Zijn in en in? niet verschillend genoeg?

  3. p3t0r zei ongeveer 3 uur later:

    @RemVee

    ja nu je het zegt… je hebt een punt ;)

    Dat vraagteken typte ik er pas bij toen ik het voorbeeld maakte… dat had ik misschien al moeten bedenken toen ik aan het comment begon!

  4. p3t0r zei ongeveer 12 uur later:

    Ik zat nog na te denken over mijn vraagteken… maar eigenlijk vind ik dat de door Michiel voorgestelde methode ook zou moeten eindigen op een vraagteken.

    De algemeen aangenomen conventie is toch dat alle methodes die als vraag worden gelezen en een boolean terug geven dienen te eindigen op een vraagteken?

  5. P8 zei ongeveer 17 uur later:

    M’n broer kwam met de volgende oplossing:

    class Numeric def out_of(i) rand(i) < to_i ? 1 : 0 end end

    2.out_of(9).times do redirect_to home_url end

(Laat url/e-mail achter »)

   Voorvertoning