Ruby jest dynamically-typed, strictly-typed (lub „silnie wpisany”) język. Lua to kolejny taki język. Pierwsza oznacza, że zmienne mogą zawierać dowolną klasę wartości. Ta ostatnia - na co się natkniesz - oznacza, że wymuszenie typu nie następuje automatycznie.
Porównaj je z JavaScriptem, który jest wpisywany dynamicznie i luźno wpisanym. W JavaScript można napisać var x = [] + false;
i będzie to próbować zrobić coś pomocnego. Dla innego przykładu, w JavaScript "1" + 1 == "11"
, ale "1" - 1 == 0
. Ruby nic takiego nie zrobi.
W twoim przypadku trzeba:
puts income.to_i - bills.to_i
Zauważ, że ponieważ większość operators are implemented as methods-w-Ruby każdej klasy może wybrać, w jaki sposób operator obsługuje argumenty różnych typów. Na przykład:
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
Jednak większość bibliotek rdzenia nie próbuje być tak sprytna.
Znacznie lepiej niż moja odpowiedź! Dzięki, Phrogz. –