Ich habe eine Autor Klasse:Warum führt Ruby nicht automatisch to_s aus?
class Author < ActiveRecord::Base
def to_s
name
end
end
to_s
Definition erlaubt es mir puts Author.first
zu tun, aber nicht puts Author.first.rjust(10)
:
NoMethodError: undefined method `rjust' for #<Author:0x21eb5d4>
Wäre es nicht besser, wenn Rubin automatisch to_s
vor der String-Methode versucht, in Fälle wie diese? Gibt es eine Möglichkeit, dieses Verhalten zu erhalten?
Das 'super.method_missing (s, * a)' ist falsch. Es sollte nur "super" sein, was die Version der Superklasse der Methode mit den gleichen Argumenten aufruft. In Ruby verhält sich super wie eine Methode und nicht wie ein Empfänger. – Chuck
@Chuck: Danke, behoben.Ich habe meinen Code vor der Veröffentlichung getestet, wurde aber getäuscht, weil die Aktion "super" eine Ausnahme auslöst - das bedeutet, dass die falsche Syntax in diesem speziellen Fall wie erwartet funktioniert hat. (Da ruby nie versucht, "method_missing" auf den Rückgabewert von super zu nennen) –