我想创建一个bang方法preload!
,它接受一个参数并像这样修改它:
hash = Hash.new
preload! hash
# => Now `hash` should have some value
我该怎么做?
def preload! param
param = # Some values
end
我提到this,但我不打算将preload!
封装在Hash
类中。
答案 0 :(得分:1)
您可以修改作为参数传递的对象,但您必须使用适当的方法来修改接收器:
def preload! hash
hash.replace(foo: 1, bar: 2)
end
h = {}
preload! h
h #=> {:foo=>1, :bar=>2}
为hash
内的preload!
分配新哈希只会影响方法内的hash
变量,而不会影响外部的h
变量:
def preload! hash
hash = {foo: 1, bar: 2} # doesn't work as expected
end
答案 1 :(得分:0)
试试这个:
def preload! param
param.replace(<key value pair that you need>)
end
hash = Hash.new # hash = {}
preload! hash # Now hash should have some value
答案 2 :(得分:0)
取决于您要执行的操作,但instance_eval
应该为您提供灵活性
def mutator! object
object.instance_eval do
def to_s
'bonk'
end
end
end
h = {}
h.to_s # => {}
mutator! h
h.to_s # => bonk
答案 3 :(得分:0)
你在尝试什么,闻起来很糟糕。你应该多做这样的事情
,而不是修改你的论点class HashPreloader
attr_reader :hash
def initialize(hash)
@hash = hash || {}
preload!
end
private
def preload!
# do your magic
end
end
然后只是
hash = HashPreloader.new.hash
进一步详细说明,我需要了解有关用例的更多信息。你究竟想做什么。