2010-07-04 3 views
3

Im пытаясь определить массив массивов в качестве константы в одном из моих классов, код выглядит следующим образом:Определение массива массивов в качестве постоянного

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

Когда я загрузить класс в IRB I получить:

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

Я попытался с помощью% вес, и все, что сделал свою очередь каждый из них в строку, так что я получил «[1,2,3,4]» вместо [1,2,3,4]

Как определить массив массивов как константу?

Im using ruby ​​1.8.7.

Когда я определяю константу в IRB, ее штраф, но когда я загружаю класс с ним, я получаю сообщение об ошибке.

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 

Этот файл выглядит следующим образом:

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

ответ

6

Код, который вы показали, работает отлично. Вы определенно не получаете сообщение об ошибке для этой конкретной строки. Ошибка вызывается в другом месте.

И да, %w создает массив строк. Для создания обычных массивов используйте [], как и вы.

Редактировать теперь, когда вы показали реальный код:

@config в сфере, где вы его используете nil, так что вы получите исключение, когда вы делаете @config[:strong_enabled].

Обратите внимание, что внутри определения класса, но вне определения какого-либо метода @foo ссылается на переменную экземпляра объекта класса, а не на какой-либо конкретный экземпляр (из-за которого он ссылается? но при инициализации константы).

1

Это немного странно использовать имя TitleCase для постоянной. Но независимо от того, он работает для меня:

$ 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]] 

Я также проверил его в Ruby 1.9.1. Не могли бы Вы уточнить?

Смежные вопросы