ruby-on-rails - Ruby - 哈希数组 - 未定义的方法 'each' 错误

标签 ruby-on-rails arrays ruby hash

我想遍历哈希数组并将值打印到终端。

当前收到错误:

main.rb:14:in `print': undefined method `each' for nil:NilClass (NoMethodError)
from main.rb:22:in `<main>'

我想要遍历,而不是像puts @transactions这样简单的东西>

我收到此错误的任何想法?谢谢

class TestRun
   @transactions = [
      {:repayment_number => 1, :repayment_amount => 224.34},
      {:repayment_number => 2, :repayment_amount => 241.50},
      {:repayment_number => 3, :repayment_amount => 135.04},
      {:repayment_number => 4, :repayment_amount => 91.00}
   ]

   def print()
      @transactions.each do |t|
         puts "#{t[:repayment_number]} - #{t[:repayment_amount]}"
      end
   end

end

@test = TestRun.new
@test.print()

最佳答案

您已经定义了两次 @transactions,最初是当 self 等于 TestRun 时,使其成为一个类实例变量 ,然后在 print 方法中,当 self 是实例 TestRun.new 时,使它成为一个实例变量 .这两个变量与 @night@day 一样不同。

以下是使您的代码正常工作的三种方法(前两种仅用于教育目的)。

使print成为类方法

class TestRun
  puts "self at class level = #{self}"
  @transactions = [
    {:repayment_number => 1, :repayment_amount => 224.34},
    {:repayment_number => 2, :repayment_amount => 241.50}
  ]
  def self.print
    puts "self within self.print = #{self}"
    @transactions.each do |t|
      puts "#{t[:repayment_number]} - #{t[:repayment_amount]}"
    end
  end
end
  #=> self at class level = TestRun
TestRun.print
  #=> self within self.print = TestRun
  #   1 - 224.34
  #   2 - 241.5

从方法 print 中访问类实例变量

class TestRun
  @transactions = [
    {:repayment_number => 1, :repayment_amount => 224.34},
    {:repayment_number => 2, :repayment_amount => 241.50}
  ]
  def print
    puts "self within print = #{self}"
    self.class.instance_variable_get(:@transactions).each do |t|
      puts "#{t[:repayment_number]} - #{t[:repayment_amount]}"
    end
  end
end

TestRun.new.print
  #=> self within print = #<TestRun:0x007fcccb13f390>
  #   1 - 224.34
  #   2 - 241.5

在初始化方法中定义@transactions,使其成为一个实例变量

这是@31piy 所做的,很可能是 OP 的意图。

class TestRun
  def initialize
    puts "self within initialize = #{self}"    
    @transactions = [
      {:repayment_number => 1, :repayment_amount => 224.34},
      {:repayment_number => 2, :repayment_amount => 241.50}
    ]
  end
  def print
    puts "self within print = #{self}"
    @transactions.each do |t|
      puts "#{t[:repayment_number]} - #{t[:repayment_amount]}"
    end
  end
end

TestRun.new.print
  #=> self within initialize = #<TestRun:0x007fcccb2ae988>
  #   self within print = #<TestRun:0x007fcccb2ae988>
  #   1 - 224.34
  #   2 - 241.5

关于ruby-on-rails - Ruby - 哈希数组 - 未定义的方法 'each' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799205/

相关文章:

ruby-on-rails - 将 JSON 数组转换为 Activerecord 模型数组?

ruby-on-rails - 使用 Capistrano 在 Heroku 上部署?

ruby-on-rails - 按 utc 日期的 rails 组

c# - 无法将 uint* 转换为 uint[]

java - JAVA中如何解析父子相关的JsonArray?

ruby - 正则表达式匹配所有字母数字主题标签,没有符号

ruby-on-rails - 这是通过 Controller 进行质量分配的安全方法吗?

ruby-on-rails - 是否可以登录到 Ruby on Rails 3 中的两个不同位置?

javascript - 为什么我的数组中有空项目,我该如何摆脱它们?

ruby - 许多客户端连接 Ruby