は、私はそれがそのオブジェクト上でその操作のためのアイデンティティ要素何知りたいのですrespond_to? :+
という特定のオブジェクトを考えます。例えば、a
場合Fixnum
は、それがどんなFixnum
のための操作:+
ためa + 0 == a
ため0
を与えるべきです。もちろん、私はすでにFixnum
について話しているときに:+
と:*
のアイデンティティ要素を知っていますが、すべての数値型と演算に対してそれらを動的に取得する標準パターン/イディオムはありますか?操作のためのアイデンティティ要素(0,1)を取得する任意のイディオムはありますか?
具体的には、グラフの各辺のコスト/距離/重さがユーザー指定の型で指定されているv1とv2(グラフの頂点)間の最短経路を計算するコードを書きました(下記参照) 。現在の実装では、辺のコスト/重みはFixnum
,Float
またはComparable
を実装し、0
を追加してself
を返すことができます。
しかし、私は最高のパターンであると思いまして:使用されているタイプを必要と
- は、そのタイプがa.class :: ADDITION_IDENTITY_ELEMENT ほかのアイデンティティ要素の発見」のいくつかの種類を提供必要
- をサポートしている必要があります
- ?
a + 0 == a
マイDijkstra algorithm implementation
def s_path(v1,v2)
dist = Hash.new { nil}
pred = {}
dist[v1] = 0 # distance from v1 to v1 is zero
#pq = nodes
pq = [v1]
while u = pq.shift
for edge in from(u)
u,v,cost = *edge
new_dist = cost + dist[u]
if dist[v].nil? or new_dist < dist[v]
dist[v] = new_dist
pred[v] = u
pq << v
end
end
end
path = [v2]
path << pred[path.last] while pred[path.last]
path.reverse
end