Вы определили @transactions
дважды, сначала, когда self
равна TestRun
, что делает его экземпляр переменная класса, то в методе print
, когда self
является экземпляром TestRun.new
, что делает, что один в экземпляр переменной. Эти две переменные отличаются от @night
и @day
.
Вот три способа заставить ваш код работать (первые два предназначены только для образовательных целей).
сделать печати метод класса
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
Доступ к переменной экземпляра класса внутри метода печати
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
'@ transaction' определяется на основе Eigenclass' TestRun', а не экземпляров 'TestRun'. – cobaltsoda