Module: Random::RangeExtensions

Included in:
Range
Defined in:
lib/standard/facets/random.rb

Overview

Random extensions for Range class.

Instance Method Summary collapse

Instance Method Details

#at_randObject

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



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/standard/facets/random.rb', line 69

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