如何从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({})
答案 0 :(得分:2)
要回答您的紧迫问题,您可以像这样访问Hash
:
if (data.is_a?(::Hash))
puts "It's a hash!"
end
这仍然会因其他原因而失败,这是因为BasicObject
不包含Kernel
,因此puts
不可用:
#
的未定义方法'puts'
如果您也这样做:
class Basic < BasicObject
include ::Kernel
或者这样:
::Kernel.puts "It's a hash!"
然后它将按预期工作。