Ruby 动态数组 : undefined local variable or method `s' for main:Object (NameError)

标签 ruby arrays dynamic

我对 ruby​​ 还是个新手。 由于某种原因没有看到我的数组。 我在 irb 中测试了我的代码逻辑,它似乎工作正常,但是当我在 if 语句中使用它时,它因标题中的错误而中断。

$s = []

i = 0

File.open("test.log").each do | l |
    if l =~ /(m.)/
        s << [$1]
        i=i+1
    end

    if l =~ /(p.)/
        s[i-1] << $1
    end

end

s.each do |g|
    p g
end

一个例子test.log:

aaaaaaaaaaaaaaaaaa
m1
ggg
p1
p2
p3
p4
oooooooooooooo
m2
p1
p2
p3
p4
p5
gggggggggggggg
m3
p1
kkkkkkkkkkkk
m4
m5
llllllllllllll

我怎样才能得到这样的数组?

[[m1,p1,p2,p3,p4], [m2,p1,p2,p3,p4,p5], [m3,p1], [m4], [m5]]

最佳答案

您已将数组声明为 $s , 但正在尝试以 s 的形式访问它.就 Ruby 而言,这是两个不同的变量。您应该将其声明为 s = []或始终以 $s 访问它,例如$s << [$1] .

编辑:因为评论很受欢迎,我会添加 Ruby global variables (即那些以 $ 开头的)会导致非常难以调试的情况,我不鼓励你使用它们。我想不出在不可能有​​更清洁的解决方案的情况下使用全局。

关于Ruby 动态数组 : undefined local variable or method `s' for main:Object (NameError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626068/

相关文章:

ruby - XML-RPC over SSL with Ruby : end of file reached (EOFError)

mysql - 如何创建与 Rails 中的 View 相对应的模型

ruby-on-rails - 我在哪里可以找到关于 'acts_as_list' gem 的一些好的文档?

java - 在运行时创建具有反射和泛型的类的数组

c++ - 在这种情况下如何正确释放内存

python - 有没有一种简单/有效的方法可以动态地创建 mysql 数据库 'build it' 自己的结构,因为它将名称/值对保存到光盘上?

ruby - 这两个 Ruby 类初始化定义有什么区别?

动画中的Javascript数组拼接

c# - 如何在类型变量中创建任何类型的字典?

python - 如何在默认 Python 版本之间动态切换?