Ruby è un dynamically-typed, strictly-typed (o "fortemente tipizzato") linguaggio. Lua è un'altra lingua del genere. Il primo significa che le variabili possono contenere qualsiasi classe di valore. Quest'ultimo - quello che stai scontando - significa che il tipo di coercizione non avviene automaticamente.
Contrasto con JavaScript, che viene digitato in modo dinamico e con caratteri liberi. In JavaScript è possibile scrivere var x = [] + false;
e sarà tentativo fare qualcosa di utile. Per un altro esempio, in JavaScript "1" + 1 == "11"
ma "1" - 1 == 0
. Ruby non farà nulla del genere.
Nel tuo caso è necessario:
puts income.to_i - bills.to_i
Si noti che, perché la maggior parte operators are implemented as methods in Ruby-ogni classe può scegliere come l'operatore gestisce operandi di vario tipo. Ad esempio:
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
La maggior parte delle volte le librerie principali non tentano di essere così intelligenti, comunque.
Molto meglio della mia risposta! Grazie, Phrogz. –