是否有可能在Ruby来定义这样的setter和类吸气剂可与[]
或()
或不服一样被使用?例如。红宝石括号设定器/吸气
word.meaning[:english] = "ruby"
puts word.meaning[:german] # "Rubin"
请注意word.meaning
一定不能是散列!和:english
,:german
是用于设置者/获取者meaning
的一类附加参数。
是否有可能在Ruby来定义这样的setter和类吸气剂可与[]
或()
或不服一样被使用?例如。红宝石括号设定器/吸气
word.meaning[:english] = "ruby"
puts word.meaning[:german] # "Rubin"
请注意word.meaning
一定不能是散列!和:english
,:german
是用于设置者/获取者meaning
的一类附加参数。
是的,它可以做到。您需要定义[]=
和[]
方法。
在这个例子中,我使用的是Hash
作为内部数据结构 - 您可以自由使用任何你喜欢的。
class Word
attr_reader :meaning
def initialize
@meaning = Meaning.new
end
end
class Meaning
attr_reader :h
def initialize
@h = {}
end
def []=(key, value)
@h[key] = value
end
def [](key)
@h[key]
end
end
实施例:
word = Word.new
word.meaning[:english] = 'Hello'
word.meaning[:english] # => 'Hello'
OP明确指出'word.meaning一定不能是散列'(尽管目前还不清楚为什么必须是这种情况以及OP在做什么)。看起来OP似乎期待着setter和getter不处理完全相同的事情,但他们在某种程度上是相关的。我认为你不了解这个问题。我也没有。 – sawa
@sawa和我的对象不是哈希。 “word.meaning”可以是任何事物的一个实例 - 例如“Foo”。 **我的例子中的散列纯粹是一个实现细节**至于理解这个问题 - 我明白它。 OP可以很容易地实现getter来检查':english'键并翻译为':german' – Kyle
它只是一个散列的包装。我相信你所做的正是OP不想做的。 – sawa
如何' “鲁宾”'从信息'衍生自:english',' “红宝石”'和':german'?根本不清楚你在做什么。 – sawa
@sawa OP在类实例中要求使用“setter”和“getter”方法。 'word.meaning [:german]#“Rubin”是一个使用“getter”方法的例子。 – Kyle
是否“不得”读取“不必”? –