在ruby中,对于许多类,您可以确保拥有正确的类,或者在某些情况下使用类似于以下代码的类转换类。
Hash({a: 3}) #=> {a: 3}
Hash(3) #=> TypeError
但是,如果您从地图或其他内容中获取类,则此方法无效。例如,以下代码引发语法错误
type_map = {class: Hash}
type_map[:class]({a: 3}) #=> Unexpected '(', expecting ')'
就像这样:
klass = Hash
klass({a: 3}) #=> NoMethodError: undefined method klass for main:Object
有人知道这样做的方法吗?
答案 0 :(得分:5)
在Kernel
模块中,有Array
和Hash
方法分别创建数组和哈希值。
当您输入Hash({a: 3})
时,您正在调用此方法,而不是Hash
类。
在你的例子中,事情发生了一些变化:
klass = Hash # Reference to a Hash class
klass({a: 3}) # try to access a method a method that doesn't exist in hash class
您可以将示例更改为:
method = Kernel.method(:Hash)
method.call({a: 3})