Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby可枚举文件中获取底层对象的类?_Ruby - Fatal编程技术网

如何在Ruby可枚举文件中获取底层对象的类?

如何在Ruby可枚举文件中获取底层对象的类?,ruby,Ruby,如何确定e是数组、散列还是其他类型的枚举数 在Ruby 1.9.2中工作(很容易)* 你也不应该这样做。枚举数并不意味着关心其中包含的内容,而是意味着对某些内容进行迭代。无论如何,您可能不应该传递枚举数:只传递实际对象 不过,您可能会做一些令人讨厌的事情,比如解析[].each.用正则表达式检查[]或{},或者是另一种类型,如#。但这太可怕了。我建议你重新思考为什么你想这样做,然后不去做 *注意,不容易编程的方法是使用Ruby C API编写C代码,并点击枚举器中的实际对象指针。需要这样做,因为

如何确定e是数组、散列还是其他类型的枚举数

在Ruby 1.9.2中工作(很容易)*

你也不应该这样做。枚举数并不意味着关心其中包含的内容,而是意味着对某些内容进行迭代。无论如何,您可能不应该传递枚举数:只传递实际对象

不过,您可能会做一些令人讨厌的事情,比如解析
[].each.用正则表达式检查
[]
{}
,或者是另一种类型,如
#
。但这太可怕了。我建议你重新思考为什么你想这样做,然后不去做


*注意,不容易编程的方法是使用Ruby C API编写C代码,并点击枚举器中的实际对象指针。需要这样做,因为枚举器是用C编写的,并且会导致执行类似于
[]的操作。每个.instance_变量
返回
[]

我暂时认为这是不可能的。在创建枚举器时,似乎不需要实际引用源对象本身,只需要告诉枚举器如何到达下一个、当前等。。。值

这并不是我认为这是合适的,也不是一个好主意,但您可以检查枚举器,并可能获得一些信息,这些信息将提示您底层对象。当然,这就引出了一个问题,你为什么要这么做

a = [4, 5, 3]
e = a.each
e.class #=> Enumerator
e.first.class #=> Fixnum
a=[1,2,3,4]
=> [1, 2, 3, 4]
e=a
=> #
e、 检查
=> ""
a={:foo=>“bar”}
=>{:foo=>“bar”}
e=a
=> #    
e、 检查
=>“#\“bar\”}:每个>”

然后可以使用regexp尝试梳理出有关底层对象的信息。在某些情况下,这可能不起作用(它确实适用于范围)。我要再次强调的是,这样做可能没有什么好的理由。

你可以打电话给inspect,但这看起来很难看。安德鲁打败了我。通常,当有人发布新答案时,我会收到通知。绝对同意这是一件可怕的丑陋的事情。B七,如果你决定听从安德鲁的指示,这里有一个你可能想开始的。
eobj
就是您要查找的对象。
a = [1,2,3,4]
=> [1, 2, 3, 4]
e = a.each
=> #<Enumerator: ...>
e.inspect
=> "<#Enumerator: [1, 2, 3, 4]:each>"

a = { :foo => "bar" }
=> {:foo=>"bar"}
e = a.each
=> #<Enumerator: ...>    
e.inspect
=> "#<Enumerator: {:foo=>\"bar\"}:each>"