は、私がこれまで持っているもの、それが動作していないされています。なぜそれが動作していないペアを保持するRubyクラスを作成するにはどうしたらいいですか?ここ
class Couple(o,t)
one = o
two = t
end
couple1 = Couple.new(10, "Ten")
p couple1.one
p couple1.two
わかりませんか?
は、私がこれまで持っているもの、それが動作していないされています。なぜそれが動作していないペアを保持するRubyクラスを作成するにはどうしたらいいですか?ここ
class Couple(o,t)
one = o
two = t
end
couple1 = Couple.new(10, "Ten")
p couple1.one
p couple1.two
わかりませんか?
関数を定義するように動作しないクラスを定義するには、内部変数を使用し、それらの機能を定義する必要があり、かつ呼び出したときにそれを伝える初期化子は何をすべきかattr_accessorはに役立ちます.new
関数と変数を設定するのは難しい。ほとんどの最も簡単な方法はinitialize
いくつかの変数を持つクラスに新しい機能を使用するために
class Couple
attr_accessor :one, :two
end
couple1 = Couple.new
couple1.one = 10
couple1.two = "Ten"
p couple1.one
p couple1.two
のようなクラスを持って使用することです、あなたはあなたの
class Couple
attr_accessor :one, :two
def initialize(one, two)
@one = one
@two = two
end
end
couple1 = Couple.new(10, "Ten")
p couple1.one
p couple1.two
のように見えるクラス定義を与えて、その関数を定義することができます
読み込みにはattr_reader
、読み込み/書き込みにはattr_accessor
を使用する必要があります。あなたのクラスには、次のようになります。
class Couple
attr_accessor :one, :two
def initialize(one, two)
@one = one
@two = two
end
end
attr_accessor
を使用して、この場合には、メソッドone, one=, two, two=
を作成します。 attr_reader
を使用する場合、メソッドone, two
が作成されます。また、あなたの方法one=, two=
を与えるattr_writer
、あり
couple = Couple.new(5, 6)
p couple.one # Outputs 5
p couple.two # Outputs 6
couple.one = 7
p couple.one # Outputs 7
が、これは、あなたがこのケースで探しているものではありません。上記のコード例を使用
は、あなたが持っている可能性があります。これは、変数へのアクセスのみを書き込みます。
アイテムのペアを保持するだけでよい場合は、Structを使用します。これは、変数とアクセサのみを含むクラスの単純なジェネレータです。それ以外は何もありません(同様のC/C++のStructと同じです)。
Couple = Struct.new(:one, :two)
# Or more idiomatically
class Couple < Struct.new(:one, :two)
def to_s
"one: #{self.one}, two: #{self.two}"
end
end
couple1 = Couple.new(10, 'ten')
puts couple1 # one: 10, two: ten
couple1.one = 100
puts couple1 # one: 100, two: ten
また、Rubyで1つの非常に興味深いのは、クラスのデータ/メンバー、インスタンスとクラスの両方が/静的なものは、「プライベート」であるということです - あなただけのアクセサメソッドを介して外部からアクセスすることができ、直接ではなく、 Rubyはマクロatrr_accessor
,attr_reader
、およびattr_writer
を使ってこれらのメソッドを迅速に生成することができます。
class Couple
one = 'o'
two = 't'
end
p Couple.one # NoMethodError: undefined method `one' for Couple:Class
class Couple
def initialize(one, two)
@one = one
@two = two
end
end
c = Couple.new(10, 'ten')
p c.one # undefined method `one' for #<Couple:0x936d2d4 @one=10, @two="ten">
だから、アクセサーが必要です。
確かに、私はちょうど始まります。 – antonpug