Определение массива массивов как константы - PullRequest
3 голосов
/ 04 июля 2010

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

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

Когда я загружаю класс в IRB, я получаю:

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

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

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

Я использую 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]]]

Ответы [ 2 ]

6 голосов
/ 04 июля 2010

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

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

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

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

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

1 голос
/ 04 июля 2010

Немного странно использовать название 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.Не могли бы вы быть более конкретным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...