Vô cực trong Ruby là gì?
Đó là thứ có điểm bắt đầu nhưng không có điểm kết thúc.
Trong Ruby, chúng ta có thể diễn đạt khái niệm vô cực này với Float::INFINITY
không đổi.
Bạn có thể tự hỏi điều này hữu ích như thế nào.
Hãy để tôi giải thích bằng các ví dụ!
Vô cực là kết quả của các phép toán số học
Ruby trả về một Infinity
đối tượng, là kết quả của các phép toán nhất định.
Ví dụ :
Bạn có thể quen với lỗi "chia cho không".
Đây rồi :
1/0 # ZeroDivisionError: divided by 0
Nhưng…
Nếu bạn sử dụng phao, bạn sẽ nhận được thứ khác:
1/0.0 # Infinity
Infinity
!
Nhưng đó không phải là tất cả.
Nếu bạn thử chia 0
bởi 0.0
, thì bạn sẽ nhận được một giá trị đặc biệt khác.
Hãy xem :
0/0.0 # NaN
NaN này là gì?
Nó có nghĩa là "Không phải là một con số" và theo như tôi biết, đây là nơi duy nhất trong Ruby mà bạn sẽ tìm thấy giá trị này.
Tại sao đây là một điều?
Đây là một phần của Đặc tả IEEE 754, giải thích cách hoạt động của các phép toán dấu phẩy động.
Btw, có một số phương pháp liên quan :
-
nan?
-
finite?
-
infinite?
Bạn có thể sử dụng các phương pháp này để kiểm tra các giá trị đặc biệt.
Các phương pháp này có sẵn trên Floats.
Vì Ruby 2.4 bạn cũng có thể sử dụng finite?
&infinite?
với Số nguyên.
Cách tạo Dải vô hạn
Được rồi.
Điều đó thật thú vị… chúng ta hãy xem thêm các ví dụ khác.
Bây giờ với Ranges!
Đây là phạm vi vô hạn :
(1..Float::INFINITY).take(10) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Điều này có thể hữu ích khi bạn không biết trước về điểm cuối của phạm vi.
Một vấn đề…
Nó chỉ hoạt động với các số làm giá trị bắt đầu.
Ví dụ :
("a"..Float::INFINITY) # ArgumentError: bad value for range
Giải pháp là gì?
Với Ruby 2.6, bạn có thể thực hiện việc này :
("a"..).take(5) # ["a", "b", "c", "d", "e"]
Vâng, đó không phải là một sai lầm! Phạm vi này không có giá trị kết thúc, chỉ có giá trị bắt đầu của "a"
, rồi đến hai dấu chấm ..
để biến nó thành một phạm vi không bao giờ kết thúc.
Đây là cú pháp mới.
Sử dụng Ruby 2.6+ nếu bạn muốn điều này hoạt động.
Vô cực là giá trị tối đa &tối thiểu
Một cách sử dụng thực tế khác cho Infinity
?
Chà…
Nó là lớn nhất (Infinity
) &nhỏ nhất (-Infinity
) số trong Ruby.
Bạn có thể sử dụng giá trị này làm giá trị bắt đầu.
Đây là một ví dụ :
def smallest_percent_size(style, ary_size) @smallest_percent ||= Float::INFINITY if style == :percent && ary_size < @smallest_percent @smallest_percent = ary_size end @smallest_percent end
Mã này là từ Rubocop, một dự án mã nguồn mở.
Đây là cách nó hoạt động :
Chúng tôi đang cố gắng tìm kích thước mảng nhỏ nhất, nhưng chúng tôi cần giá trị bắt đầu cho kích thước đó vì sử dụng nil
sẽ cung cấp cho bạn một lỗi.
Bạn có thể nhập số lớn &hy vọng vậy là đủ.
Hoặc bạn có thể sử dụng Float::INFINITY
, biết rằng đó là con số lớn nhất có thể.
Tóm tắt
Bạn đã tìm hiểu về tính vô cực trong Ruby, nó là gì, nó có thể hiển thị ở đâu và cách sử dụng nó.
Hãy chia sẻ bài viết này để nhiều người có thể được hưởng lợi từ nó.
Cảm ơn vì đã đọc!