2009-11-04 6 views
0

Je suis un peu un Ruby Noob quand il s'agit de fonctionnalités plus avancées. Actuellement, je vis avec des objets Proc. Quelqu'un peut-il me dire ce qui ne va pas avec cet exemple de code?L'objet Ruby Proc en tant que variable de membre public ne fonctionne pas?

class Tester 
    @printer = Proc.new do |text| 
    puts text 
    end 
    attr_accessor :printer 
end 

t = Tester.new 
t.printer.call("Hello!") 

Il me donne l'erreur suivante:

Test.rb:10: undefined method `call' for nil:NilClass (NoMethodError) 

Je ne vois pas immédiatement pourquoi il ne devrait pas fonctionner. Quelqu'un peut-il m'éclairer?

Répondre

3

Vous ne définissez pas @printer dans la méthode initialize de la classe. Cela fonctionnera:

class Tester 
    def initialize 
    @printer = Proc.new { |t| puts t } 
    end 
    attr_accessor :printer 
end 
+2

Informations supplémentaires: La variable @printer définie dans le code de StackedCrooked appartient à la classe Tester elle-même. En dehors des méthodes d'instance, tout code dans une définition de classe utilise la classe comme 'self' - donc si vous définissez une variable d'instance, vous définissez une variable d'instance de la classe (qui est une instance de Class) plutôt qu'une variable d'instance de toute instance particulière. – Chuck

Questions connexes