rails应用程序中的`to_hash`是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rails应用程序中的`to_hash`是什么?相关的知识,希望对你有一定的参考价值。
在我的rails应用程序中,我看到很多.to_hash.
究竟是什么?
def to_hash
serializable_hash
end
答案
当方法具有关键字参数时,Ruby会将Hash参数隐式转换为关键字参数。在分配可选参数之前,通过调用to_hash
on作为该方法的最后一个参数来执行此转换。如果to_hash
返回Hash实例,则将散列作为该方法的关键字参数。
除非你确定知道你在做什么,否则永远不要实现隐式转换方法!例如,人们普遍认为,#to_hash
方法正在实施(可能是因为“比名称更漂亮”而不是#to_h?
)并导致最奇怪的效果。
def method(arg = 'arg', kw_arg: 'kw_arg')
[arg, kw_arg]
end
# As expected:
method() # => ['arg', 'kw_arg']
method(kw_arg: 'your keyword') # => ['arg', 'your keyword']
# Intended as nicety: implicit hash conversion
method({kw_arg: 'hash kw_arg'}) # => ['arg', 'hash kw_arg']
# But has bad side effects:
o = String.new('example object')
def o.to_hash # Now o responds to #to_hash
{ kw_arg: 'o.to_hash' }
end
method(o)
# => ['arg', 'o.to_hash']
# Ruby thinks that o is a Hash and converts it to keyword arguments -.-
method(o, o)
# => ['example object', 'o.to_hash']
# Same here, but since only the *last* argument is converted,
# the first is properly assigned to the first optional argument
通常,当您需要将其显式转换为哈希时,请不要定义to_hash。改为定义to_h。
请参阅Here
以上是关于rails应用程序中的`to_hash`是什么?的主要内容,如果未能解决你的问题,请参考以下文章
Ruby 中的 to_s 与 to_str(以及 to_i/to_a/to_h 与 to_int/to_ary/to_hash)