Ruby là một dynamically-typed, strictly-typed (hoặc "mạnh mẽ, đánh máy") ngôn ngữ. Lúa là một ngôn ngữ khác. Điều này có nghĩa là các biến có thể chứa bất kỳ lớp giá trị nào. Cái thứ hai — những gì bạn đang chạy vào — có nghĩa là sự ép buộc kiểu đó không xảy ra tự động.
Tương phản với JavaScript, được nhập động và được nhập sai. Trong JavaScript, bạn có thể viết var x = [] + false;
và nó sẽ cố gắng để làm điều gì đó hữu ích. Ví dụ khác, trong JavaScript "1" + 1 == "11"
nhưng "1" - 1 == 0
. Ruby sẽ không làm gì cả.
Trong trường hợp của bạn, bạn cần:
puts income.to_i - bills.to_i
Lưu ý rằng, bởi vì hầu hết operators are implemented as methods trong Ruby-mỗi lớp có thể chọn cách hành xử lý toán hạng của các loại khác nhau. Ví dụ:
class Person
def +(something)
if something.is_a?(Numeric)
self.weight += something
elsif something.is_a?(Time)
self.age += something
else
raise "I don't know how to add a #{something.class} to a Person."
end
end
end
Hầu hết các thư viện chính không cố gắng quá thông minh.
Tốt hơn nhiều so với câu trả lời của tôi! Cảm ơn, Phrogz. –