是否有任何成语来获取Ruby对象上的操作(:+,:*)的标识元素(0,1)?

时间:2012-02-21 23:07:24

标签: ruby

给定某个对象respond_to? :+我想知道它是该对象上该操作的标识元素。例如,如果aFixnum,那么它应该为0提供:+,因为a + 0 == a适用于任何Fixnum。当然,在谈到:+时,我已经知道:*Fixnum的标识元素,但是是否有任何标准模式/习惯用法可以动态获取所有数字类型和操作?

更具体地说,我已经编写了一些代码(见下文)来计算v1和v2(图中的顶点)之间的最短路径,其中图中每条边的成本/距离/权重以用户指定的类型给出。在当前实现中,边缘的成本/权重可以是FixnumFloat或实现Comparable的任何内容,并且可以将0添加到自身并返回{{1 }}

但我想知道什么是最好的模式:

  • 要求使用的类型必须支持self
  • 要求该类型提供某种附加标识元素发现'a.class :: ADDITION_IDENTITY_ELEMENT
  • ...

我的Dijkstra algorithm implementation

a + 0 == a

1 个答案:

答案 0 :(得分:1)

我认为a.class::ADDITION_IDENTITY_ELEMENT非常好,除非我称之为a.class::Zero

另一种选择是(a-a)

就我个人而言,我不会试图让事情如此抽象,我只要求每个距离都是Numeric(例如FloatInteger)。然后,您可以继续使用0