【问题标题】:Trying to access Hash from Method, but keep getting NameError尝试从 Method 访问 Hash,但不断收到 NameError
【发布时间】:2013-09-21 15:06:45
【问题描述】:

我是 Rubywan,所以我还是新手。任何建议都会非常有帮助!目前正在研究方法和哈希。我正在尝试访问 Hash 命名的学校,但不断出现 NameError。更具体地说,这是错误(后面是尝试访问哈希的方法):

test.rb:19:in `student_grade': undefined local variable or method `school' for main:Object (NameError).

def student_grade(student_name)
  student = school[:students].select do |student| 
    if student[:name] == student_name 
      student_grade = student[:grade]
      puts student_grade 
    else 
      puts "Student doesn't exist!"
    end 
  end
end

【问题讨论】:

    标签: ruby methods hash


    【解决方案1】:

    school 局部变量是在您的方法范围之外创建的(方法有自己的局部变量范围)。因此,您无法在方法student_grade 中访问它。示例如下:

    hsh = {:a => 1}
    def foo
      hsh
    end
    foo 
    # undefined local variable or method `hsh' for main:Object (NameError)
    

    要访问它,您必须按以下方式传递它:

    hsh = {:a => 1}
    def foo(hsh)
      hsh
    end
    foo(hsh) # => {:a=>1}
    

    要详细了解局部变量的范围,请参见此处:Scope of local variable

    【讨论】:

    • 有可能 OP 正在编写一个简单的类并且可以使用实例变量@school
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2021-11-03
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多