source: EcnlProtoTool/trunk/mruby-2.1.1/mrblib/numeric.rb@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 2.5 KB
Line 
1##
2# Numeric
3#
4# ISO 15.2.7
5class Numeric
6 include Comparable
7 ##
8 # Returns the receiver simply.
9 #
10 # ISO 15.2.7.4.1
11 def +@
12 self
13 end
14
15 ##
16 # Returns the receiver's value, negated.
17 #
18 # ISO 15.2.7.4.2
19 def -@
20 0 - self
21 end
22
23 ##
24 # Returns the absolute value of the receiver.
25 #
26 # ISO 15.2.7.4.3
27 def abs
28 if self < 0
29 -self
30 else
31 self
32 end
33 end
34end
35
36##
37# Integral
38#
39# mruby special - module to share methods between Floats and Integers
40# to make them compatible
41module Integral
42 ##
43 # Calls the given block once for each Integer
44 # from +self+ downto +num+.
45 #
46 # ISO 15.2.8.3.15
47 def downto(num, &block)
48 return to_enum(:downto, num) unless block
49
50 i = self.to_i
51 while i >= num
52 block.call(i)
53 i -= 1
54 end
55 self
56 end
57
58 ##
59 # Returns self + 1
60 #
61 # ISO 15.2.8.3.19
62 def next
63 self + 1
64 end
65 # ISO 15.2.8.3.21
66 alias succ next
67
68 ##
69 # Calls the given block +self+ times.
70 #
71 # ISO 15.2.8.3.22
72 def times &block
73 return to_enum :times unless block
74
75 i = 0
76 while i < self
77 block.call i
78 i += 1
79 end
80 self
81 end
82
83 ##
84 # Calls the given block once for each Integer
85 # from +self+ upto +num+.
86 #
87 # ISO 15.2.8.3.27
88 def upto(num, &block)
89 return to_enum(:upto, num) unless block
90
91 i = self.to_i
92 while i <= num
93 block.call(i)
94 i += 1
95 end
96 self
97 end
98
99 ##
100 # Calls the given block from +self+ to +num+
101 # incremented by +step+ (default 1).
102 #
103 def step(num=nil, step=1, &block)
104 raise ArgumentError, "step can't be 0" if step == 0
105 return to_enum(:step, num, step) unless block
106
107 i = __coerce_step_counter(num, step)
108 if num == self || step.infinite?
109 block.call(i) if step > 0 && i <= (num||i) || step < 0 && i >= (num||-i)
110 elsif num == nil
111 while true
112 block.call(i)
113 i += step
114 end
115 elsif step > 0
116 while i <= num
117 block.call(i)
118 i += step
119 end
120 else
121 while i >= num
122 block.call(i)
123 i += step
124 end
125 end
126 self
127 end
128end
129
130##
131# Integer
132#
133# ISO 15.2.8
134class Integer
135 include Integral
136 ##
137 # Returns the receiver simply.
138 #
139 # ISO 15.2.8.3.14
140 def ceil
141 self
142 end
143
144 ##
145 # Returns the receiver simply.
146 #
147 # ISO 15.2.8.3.17
148 def floor
149 self
150 end
151
152 ##
153 # Returns the receiver simply.
154 #
155 # ISO 15.2.8.3.24
156 alias round floor
157
158 ##
159 # Returns the receiver simply.
160 #
161 # ISO 15.2.8.3.26
162 alias truncate floor
163end
Note: See TracBrowser for help on using the repository browser.