ひわだです。遅まきながらですが。 >>> "gotoken" == GOTO Kentaro writes: gotoken> > [1]_q0 みたいな書き方ができると同値類っぽく gotoken> gotoken> なる! []_abc とか {}_foo とか ()_xyz などの gotoken> 文法は嬉しいかも知れませんね。 gotoken> 1.3alpha が始まってからお願いしてみようかな。 '_' を演算子に見立ててしまえば良いのかも。 class Array alias times_orig * def *(x) if x.kind_of?(Integer) times_orig(x) else a, b = x.coerce(self); a * b end end end class Eq class ReversedOp def initialize(v); @v=v end def *(x); p [@v,x] end end def initialize(v); @v=v end def coerce(x); [ReversedOp.new(x), self] end end eq = Eq.new("hoge"); p [1]*eq Arrayの演算子はcoerceを呼んでくれないのでカッコ悪いですが、本質的なの はclass Eqの方だけです。'_'のかわりに'*'で代用してます。coerceの呼び方 がこれであってるのかどうかはちょっと怪しいですが。 あとは、'_'を演算子にして貰えば… ^^;。僕は'@'も演算子だとうれしいけど これはさすがに… ^^;;。smlとかだと確か任意の記号列が…(って扇るな^^;) あと、Equivな話ではないですが、Array, Hash, Range(, String, Regexp)な どの文法が対応しているクラスの(中置)演算子は標準でcoerceを呼んでくれる とうれしいかも知れません。 -- 檜田 和浩 ( hiwada / kuee.kyoto-u.ac.jp )