如何从 BasicObject 中访问 Ruby 类型名称



如何从BasicObject中访问Ruby类型名称? 我明白"...如果不使用完整的类路径,将无法找到公共类",但我不知道指定完整类路径的语法。

下面的代码失败,因为Hash未导入BasicObject

class Basic < BasicObject
def flexible(data)
if (data.is_a?(Hash))
puts "It's a hash!"
end
end
end

foo = Basic.new
foo.flexible({})

要回答您的直接问题,您可以访问如下Hash

if (data.is_a?(::Hash))
puts "It's a hash!"
end

由于其他原因,这仍然会失败,这是因为BasicObject不包括Kernel,因此puts不可用:

#<Basic:0x000055c405afbc88> 的未定义方法"放置">

如果您也这样做:

class Basic < BasicObject
include ::Kernel

或者这个:

::Kernel.puts "It's a hash!"

然后它应该按预期工作。

最新更新