...私は私の答えの下部にあるコードであなたの質問の私の最高の表現が含まれていたが、私が最初にあなたのジレンマを理解し、私は私の解決策を提示したいと思いますあなたの
name
属性がパブリックにアクセスすることを意図されている場合
はこれを行います。
class Person
attr_accessor :name
def initialize(name)
@name = name
end
def interpret(text_to_parse)
# I have no idea what you are parsing in real life
self.name = text_to_parse.split.last
end
end
person = Person.new("Frederick")
puts person.name
# => "Frederick"
person.interpret("Please, call me Fred")
puts person.name
# => "Fred"
をごname
属性がn必要がある場合は、これを行います(簡単に)公にアクセスすることができます:(価値があるものについては、Rubyで何かにアクセスすることができます。 !それは素晴らしい作る多くの事の一つ)
class Person
def initialize(name)
@name = name
end
def interpret(text_to_parse)
# I have no idea what you are parsing in real life
@name = text_to_parse.split.last
end
end
person = Person.new("Frederick")
puts person.instance_variable_get("@name")
# => "Frederick"
person.interpret("Please, call me Fred")
puts person.instance_variable_get("@name")
# => "Fred"
そして、前述したように、ここではコードにあなたの質問の私の最高の翻訳です:
class Person
def initialize
@person_summary_info = { name: "foo" }
@name = "bar"
@dob = "baz"
@favorite_food = "beer"
end
def interpret(text_to_parse)
# Some kind of parsing?
get_name_1
# OR
get_name_2(@person_summary_info)
# OR
get_name_3
# OR
@name = get_name_4
end
private
def get_name_1
@person_summary_info[:name]
end
def get_name_2(person_summary_info)
person_summary_info[:name]
end
def get_name_3
@name = 'John'
end
def get_name_4
'John'
end
end
うまくいけば、あなたはなぜ見ることができますあなたが何を正確に求めているかについてのコメントには混乱があります。他に何もない場合は、これを見て、あなたの質問をより明確に表現するのに役立ちます。
最後に、あなたが取得/設定プロセスにいくつかのカスタムコードにフックする必要がない限り、Rubyで独自のゲッター/セッターを書くことは避けるべき - あなたのためにそれらを作成するために、クラスレベルにattr_reader
/attr_writer
/attr_accessor
マクロを使用します。
サンプルコードとして書き直せますか? –
奨励金を申し出る場合は、質問を理解しやすくすることもできます。これをサンプルコードとして書き直せますか? –
interpret()メソッドは、渡された文字列を解析し、それに応じてクラスの情報を設定するためのものですか? – Brady