我已經包含在我的回答底部代碼你的問題我最好的表現,但我想提出我的解決方案,我先了解你的困境......
這樣做,如果你name
屬性,就是要公開訪問:如果您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"
做到這一點(很容易)公開:(值得一提的是,幾乎任何東西都可以在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編寫自己的getter/setter方法,除非你需要一些自定義代碼掛鉤到獲取/設置過程 - 使用類級別attr_reader
/attr_writer
/attr_accessor
宏來創建他們爲你。
你可以重新寫這樣的示例代碼嗎? –
如果您打算提供賞金,那麼您最好儘量讓自己的問題更易於理解。你能否重新寫這個樣本代碼? –
interpret()方法是否意味着是一個setter,它解析傳入的字符串,並相應地設置類的信息? – Brady