2010-07-04 9 views
3

constante Im essayant de définir un tableau de tableaux comme une constante dans une de mes classes, le code ressemble à ceci:Définition d'un tableau de tableaux comme

Constant = [[1,2,3,4], 
      [5,6,7,8]] 

Lorsque je charge la classe irb I obtenez:

NoMethodError: undefined method `[]' for nil:NilClass 

J'ai essayé d'utiliser% en poids et tout ce qui a été tour chacun en une chaîne, donc je suis « [1,2,3,4] » au lieu de [1,2,3,4]

comment définir un tableau de tableaux comme une constante?

Im utilisant du rubis 1.8.7.

Lorsque je définis la constante dans IRB c'est bien, mais quand je charge la classe avec elle, j'obtiens une erreur.

require 'file_with_class.rb' 
    NoMethodError: undefined method `[]' for nil:NilClass 
    from ./trainbbcode/tags.rb:2 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from (irb):1 

Ce fichier ressemble à ceci:

class TBBC 
    Tags = [[/\[b\](.*?)\[\/b\]/,'<strong>\1</strong>',@config[:strong_enabled]], 
    ... 
    [/\[th\](.*?)\[\/th\]/,'<th>\1</th>',@config[:table_enabled]]] 

Répondre

6

Le code que vous avez montré fonctionne très bien. Vous n'obtenez certainement pas ce message d'erreur pour cette ligne particulière. L'erreur est causée ailleurs. Oui, %w crée un tableau de chaînes. Pour créer des tableaux normaux, utilisez [] comme vous l'avez fait.

Modifier maintenant que vous avez montré le code réel:

@config est nil dans le champ où vous l'utilisez, vous obtenez une exception lorsque vous faites @config[:strong_enabled]. Notez qu'à l'intérieur d'une définition de classe, mais en dehors de toute définition de méthode, @foo fait référence à la variable d'instance de l'objet de classe, pas à celle d'une instance particulière (car à laquelle se réfèrerait-elle? encore, quand la constante est initialisée).

1

Il est un peu étrange d'utiliser un nom de TitleCase pour une constante. Mais quoi qu'il en soit, cela fonctionne pour moi:

$ ruby --version 
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9.7.0] 
$ irb --version 
irb 0.9.5(05/04/13) 
$ irb 
irb(main):001:0> Constant = [[1,2,3,4],[5,6,7,8]] 
=> [[1, 2, 3, 4], [5, 6, 7, 8]] 

J'ai également testé dans Ruby 1.9.1. Pourriez-vous être plus précis?

Questions connexes