J'ai cette classe:mathématiques avec les variables d'instance
class Account
attr_accessor :balance
def initialize(balance)
@balance = balance
end
def credit(amount)
@balance += amount
end
def debit(amount)
@balance -= amount
end
end
Ensuite, par exemple, plus tard dans le programme:
bank_account = Account.new(200)
bank_account.debit(100)
Si j'appelle la méthode de débit avec l'opérateur - dans "=" (comme indiqué dans la classe ci-dessus), le programme échoue avec le message suivant:
bank2.rb:14:in `debit': undefined method `-' for "200":String (NoMethodError)
from bank2.rb:52:in `<main>'
Mais si je retire le signe moins et juste faire @bal ance = montant, alors ça marche. Évidemment, je veux qu'il soustrait, mais je ne peux pas comprendre pourquoi cela ne fonctionne pas. Est-ce que maths ne peut pas être fait avec des variables d'instance?
Conversations forcées L'ion est toujours une bonne idée car il vous permet d'utiliser des choses qui ne sont pas des nombres, mais * pourrait * être des nombres si vous le demandez gentiment. – tadman
Michael - votre commentaire que je passais une chaîne dans initialize() m'a fait réaliser où est mon problème. J'utilisais un exemple dans ma question, mais la façon dont je suis en train de faire une nouvelle classe provient d'un argument (ARGV). Quand je lance le programme, je tape quelque chose comme "ruby bank2.rb 1000" qui fera ensuite un nouveau compte avec 1000 comme solde. Donc, je suppose maintenant que peut-être les arguments sont toujours lus en tant que chaînes de caractères et c'est de là que vient tout mon problème de chaîne. J'utilisais .to_i partout ailleurs sauf dans initialize(). Je vais essayer après le travail aujourd'hui. – cliff900
@ cliff900 Oui, ARGV contient toujours des chaînes. –