gpt4 book ai didi

ruby - 从 nil 到 hash 的隐式转换有 refine bug

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:30 32 4
gpt4 key购买 nike

我尝试对优化功能进行一些修改(我使用的是 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

我该如何解决这个问题?

最佳答案

精化是词法范围的。它们仅在您激活它们的脚本、模块声明或类声明中可见。这就是它们的全部目的

在您的情况下,您在 Aer 模块声明内部使用了细化,这意味着在该模块声明内部,NilClass 将有一个 to_hash 方法。但在该模块内部。并且在任何其他模块或类中,包括Hash,其中定义了merge!

关于ruby - 从 nil 到 hash 的隐式转换有 refine bug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141803/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com