给定某个对象respond_to? :+
我想知道它是该对象上该操作的标识元素。例如,如果a
为Fixnum
,那么它应该为0
提供:+
,因为a + 0 == a
适用于任何Fixnum
。当然,在谈到:+
时,我已经知道:*
和Fixnum
的标识元素,但是是否有任何标准模式/习惯用法可以动态获取所有数字类型和操作?
更具体地说,我已经编写了一些代码(见下文)来计算v1和v2(图中的顶点)之间的最短路径,其中图中每条边的成本/距离/权重以用户指定的类型给出。在当前实现中,边缘的成本/权重可以是Fixnum
,Float
或实现Comparable
的任何内容,并且可以将0
添加到自身并返回{{1 }}
但我想知道什么是最好的模式:
self
我的Dijkstra algorithm implementation
a + 0 == a
答案 0 :(得分:1)
我认为a.class::ADDITION_IDENTITY_ELEMENT
非常好,除非我称之为a.class::Zero
。
另一种选择是(a-a)
。
就我个人而言,我不会试图让事情如此抽象,我只要求每个距离都是Numeric
(例如Float
或Integer
)。然后,您可以继续使用0
。