我嘗試做與細化功能有點黑客(我使用Ruby 2.1.0)哈希從零隱式轉換與瑞風錯誤
目的是重定向隱式轉換(to_hash)的顯式轉換避免這個錯誤:
data = {test: :t}.merge!(nil)
# Return TypeError: no implicit conversion of nil into Hash
當我重新打開NilClass一切正常:
class NilClass
def to_hash
to_h
end
end
data = {test: :t}.merge!(nil)
# { :test => :t }
,當我用完善的功能,我得到一個無方法錯誤。
module MyRefine
module NilClass
refine ::NilClass do
def to_hash
selt.to_h
end
end
end
end
module Aer
using MyRefine::NilClass
data = {test: :t}.merge!(nil)
puts data
end
# NoMethodError: super: no superclass method `to_hash' for nil:NilClass
我該如何解決這個問題?
如何使用一個空的散列作爲後備,所以你不需要路徑'NilClass':'data = {test::t} .merge!(nil || {})' –
這是一個極簡主義者重現問題的例子。 主要思想是擴展NilClass,以避免編寫此代碼。 和精化功能使我可以做到這一點比直接延伸NilClass更乾淨。 – Naremy