self
がクラスインスタンス変数作り、TestRun
に等しいときは、その後、self
が1つのインスタンス変数ことを作り、インスタンスTestRun.new
あるprint
方法、内、最初に、二回@transactions
を定義しています。これら2つの変数は、@night
と@day
と異なります。
コードを機能させるための3つの方法があります(最初の2つは教育目的のみ)。
ください印刷それを作るクラスメソッド
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
はinitializeメソッド内@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
'@トランザクション 'は、' TestRun'のインスタンスではなく、 'TestRun'固有クラスで定義されています。 – cobaltsoda