Ruby es un dynamically-typed, strictly-typed (o "inflexible de tipos") idioma. Lua es otro de esos idiomas. Lo primero significa que las variables pueden contener cualquier clase de valor. Lo último, lo que te encuentras, significa que la coerción de tipo no ocurre automáticamente.
Contraste estos con JavaScript, que se escribe de forma dinámica y sin apretar. En JavaScript puede escribir var x = [] + false;
y intento para hacer algo útil. Para otro ejemplo, en JavaScript "1" + 1 == "11"
pero "1" - 1 == 0
. Ruby no hará nada de eso.
En el caso de que necesite:
puts income.to_i - bills.to_i
Tenga en cuenta que, debido a la mayor operators are implemented as methods en Ruby-cada clase puede elegir la forma en que el operador se encarga de operandos de varios tipos. Por ejemplo:
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 mayoría de las veces, las bibliotecas centrales no intentan ser tan ingeniosas, sin embargo.
Mucho mejor que mi respuesta! Gracias, Phrogz. –