我试图在我的一个类中将一个数组数组定义为一个常量,代码如下所示:
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]]]
答案 0 :(得分:6)
你展示的代码工作得很好。您肯定没有收到该特定行的错误消息。错误是由其他地方引起的。
是的,%w
创建了一个字符串数组。要创建普通数组,请像使用[]
一样使用。{/ p>
现在编辑您已显示真实代码:
@config
在您使用它的范围内为nil
,因此当您执行@config[:strong_enabled]
时会出现异常。
请注意,在类定义的内部,但在任何方法定义之外@foo
引用类对象的实例变量,而不是任何特定实例的实例变量(因为它会引用哪一个?没有甚至任何实例,当常数初始化时)。
答案 1 :(得分: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中测试过它。你能更具体一点吗?