[#17615] substitution at when-clause — Takaaki Tateishi <ttate@...>

立石です.

47 messages 2002/07/01
[#17619] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/01

まつもと ゆきひろです

[#17621] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

At Tue, 2 Jul 2002 02:54:01 +0900,

[#17622] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17624] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

At Tue, 2 Jul 2002 13:30:17 +0900,

[#17627] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17630] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

立石です.

[#17631] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17635] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/03

立石です.

[#17639] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/03

まつもと ゆきひろです

[#17644] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17645] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/03

まつもと ゆきひろです

[#17647] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17649] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/03

At Wed, 3 Jul 2002 17:48:58 +0900,

[#17651] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17730] Re: self in block — masaki <GEC01122@...>

16 messages 2002/07/20

[#17764] Re: self in block — masaki <GEC01122@...>

31 messages 2002/07/22
[#17765] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17768] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027383423.558649.31176.nullmailer@picachu.netlab.jp>,

[#17769] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17770] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027404202.545188.1283.nullmailer@picachu.netlab.jp>,

[#17771] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17772] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027406979.880878.1358.nullmailer@picachu.netlab.jp>,

[#17832] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@...

なかだです。

17 messages 2002/07/26
[#17835] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — matz@... (Yukihiro Matsumoto) 2002/07/26

まつもと ゆきひろです

[#17837] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@... 2002/07/26

なかだです。

[#17842] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — matz@... (Yukihiro Matsumoto) 2002/07/26

まつもと ゆきひろです

[#17886] line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/02

なかだです。

[#17893] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17897] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/03

なかだです。

[#17973] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/11

なかだです。

[ruby-dev:17644] Re: substitution at when-clause

From: keiju@... (石塚圭樹)
Date: 2002-07-03 07:22:58 UTC
List: ruby-dev #17644
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev:17639] the message: "[ruby-dev:17639] Re: substitution at
when-clause", on Jul/03 13:44(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>石塚さんは、はるか昔からそれを主張してましたね。もちろんはる
>か昔から却下しつづけているので、いまでもそうなっていないわけ
>なんですが。

(^^;;;

では, 私も代替案を:

case x
when v1
  ...
when v2
  ...
else
  ...
end

は

p = proc{|v| v === x}
if p.call(v1)
  ...
elsif p.call(v2)
  ...
else
  ...
end

と解釈できますね?

ですので, これをベースにcase文を拡張し, caseにブロックを渡せるようにする.

case {|v| v === x}
when v1
  ...
when v2
  ...
else
  ...
end

すると, 

>|case any_expr with :foo
>|when a1 => r
>|  ...
>|when a2 => r
>|  ...
>|else
>|  raise ..
>|end

相当は

r = nil
case {|v| r = v.foo(any_expr)}
when a1
  ...
when a2
  ...
else
  raise ..
end

と書け,

>|case any_expr with :<
>|when 100
>|when 10
>|else
>|  ...
>|end

相当は:

case {|v| any_expr < v}
when 100
  ...
when 10
  ...
else
  ...
end

って書けます. 

これなら, 

>このコードを見たときの動作は私には想像するのが難しいです。い
>や、もちろん説明されたら分かりますけど、なんだか直感的でない。
>それはなぜかと考えるとやっぱり、

ということもないですし, 

>これ導入しても絶対に使いこなせませんって。で、訳のわからない
>プログラムの原因になるだけだと思います。明示的な方が良い場合
>もあると思いますよ。

一応やりたいことは明示されていると思いますが?

>あと、OO的観点からは「caseは良くない、polymorphismを使え」と
>いう格言があるので、よりcaseを拡張したくないというのも、もし
>からしたらあるかも。

これは, whenにクラスを渡したときの場合ですね? Ruby使っているとtype
switchに頼ってしまうことが多いかも知れない.


__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread