Computer >> Máy Tính >  >> Lập trình >> Ruby

Ruby Infinity:Cách thức hoạt động và tại sao nó lại quan trọng

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!