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