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

时间:2018-08-11 15:41:30

标签: 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({})

1 个答案:

答案 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!"

然后它将按预期工作。