Khoảng trong Ruby
Công dụng đầu tiên và có lẽ là phổ biến nhất của “khoảng” là để biểu thị cho một dãy số. Các dãy số gồm có số hạng đầu, số hạng cuối, và quy tắc tạo các giá trị liên tiếp trong dãy. Trong Ruby, các chuỗi kiểu này được tạo bởi các toán tử .. và .... Toán tử .. (2 dấu chấm) tạo dãy số bao gồm cả 2 số hạng (ví dụ 1..3 tạo dãy 1,2,3). Còn toán tử ... (3 dấu chấm) tạo dãy số không chứa số hạng lớn hơn (ví dụ 1...3 tạo dãy 1,2). Trong Ruby, khoảng được lưu trữ trong bộ nhớ như một đối tượng Range, thay vì một danh sách các số hạng trong khoảng. Đối tượng Range chứa tham chiếu tới 2 đối tượng Fixnum tạo ra nó. Bạn có thể chuyển một khoảng thành một mảng bằng phương thức to_a.
(1..10).to_a # returns [1, 2, 3, 4, 5, 6, 7, 8 , 9, 10]
Ví dụ p021ranges.rb dưới đây minh họa cho việc xử lý khoảng trong Ruby:
=begin
Sequences have a start point, an end point, and a way to
produce successive values in the sequence
In Ruby, sequences are created using the ".." and "..."
range operators.
The two dot form creates an inclusive range.
The three-dot form creates a range that excludes the specified
high value
The sequence 1..100000 is held as a Range object
=end
digits = -1..9
puts digits.include?(5) #true
puts digits.min # -1
puts digits.max # 9
puts digits.reject {|i| i<5} # [5,6,7,8,9]
Phương thức reject sẽ trả lại kết quả là mảng, trong đó các phần tử thuộc khoảng thỏa mãn điều kiện cho trong khối mã sẽ bị loại bỏ.
Một công dụng khác của khoảng là kiểm tra xem một giá trị nào đó có nằm giữa 2 giá trị khác hay không. Ta dùng toán tử === để kiểm tra điều này
(1..10) === 5 #true
(1..10) === 15 #false
(1..10) === 3.14159 # true
('a'..'j') === 'c' # true
('a'..'j') === 'z' # false
