module Random::RangeExtensions
Public Instance Methods
at_rand()
click to toggle source
Return a random element from the range.
(1..4).at_rand #~> 2 (1..4).at_rand #~> 4 (1.5..2.5).at_rand #~> 2.06309842754533 (1.5..2.5).at_rand #~> 1.74976944931541 ('a'..'z').at_rand #~> 'q' ('a'..'z').at_rand #~> 'f'
CREDIT: Lavir the Whiolet, Thomas Sawyer
# File lib/facets/random.rb, line 68 def at_rand first, last = first(), last() if first.respond_to?(:random_delta) # TODO: work on this!!! begin first.random_delta(last, exclude_end?) rescue to_a.at_rand end else to_a.at_rand end ##elsif first.respond_to?(:succ) ## # optimized algorithm ## if (Fixnum === first || Bignum === first) && ## (Fixnum === last || Bignum === last) ## last -= 1 if exclude_end? ## return nil if last < first ## return Random.number(last - first + 1) + first ## end ## # standard algorithm ## return to_a.at_rand ##elsif Numeric === first && Numeric === last ## return nil if last < first ## return nil if exclude_end? && last == first ## return (last - first) * Random.number + first ##else ## return nil ##end end