[#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:17639] Re: substitution at when-clause

From: matz@... (Yukihiro Matsumoto)
Date: 2002-07-03 04:44:58 UTC
List: ruby-dev #17639
まつもと ゆきひろです

In message "[ruby-dev:17635] Re: substitution at when-clause"
    on 02/07/03, Takaaki Tateishi <ttate@kt.jaist.ac.jp> writes:

|僕はユーザ定義のオブジェクトをwhenに置くことができて,その値を
|得ることができると便利な場合があるというのが主張ですので,この
|ユーザ定義のものをwhenに置くことが妥当かどうかが意見が分かれて
|いる要因でしょうか?

いや、私もそういう場合があることには同意しますんで、どっちかっ
ていうと「それが妥当か」というよりも「それが言語を損なわない
か」というのが論点だと思います。

|設計/実装者は === を定義するときcase文で使って分かりやすいよう
|にするのではないかと,そして,
|=== はcase文のためにあるものと思っていたのですが…

case以外に直接 === を呼んでるケースもありますね、けっこう。

|> 新しい文法にした方が良いと思います(Perl6にならってgivenとか)。
|> 個人的にはそこまでの価値は無いような気もしますが。
|
|結局場合分けなので,caseの拡張が良いと思っています.

|case文が計算結果を用いた条件分岐だという意味からは外れないと僕は
|思っています.

でもねえ、正直なところ、

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

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

|x = any_expr
|if( r = a1.foo(x) )
|  ...
|elsif( r = a2.foo(x) )
|  ...
|elsif( r = a3.foo(x) )
|  ...
|else
|  raise ...
|end

に比べて省略されているところが多いうえ、その省略された部分が
わりと本質だったりするからではないでしょうか。メソッド呼び出
しとか。

caseってのは実は立石さんの思っているような

|case文が計算結果を用いた条件分岐

ではないのかもしれません。polymorphismを利用するためにあるメ
ソッド(===)を呼んでますけど、その実態はただの多重分岐で、そ
れにむりやり「計算結果を用いた条件分岐」という「意味」を付与
すると破綻するんじゃないかと思います。

|ちなみに,'<'などを使いたいという話は以前ありましたね.

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

|case any_expr with :<
|when 100
|when 10
|else
|  ...
|end
|
|などとして,「○○より大きい場合」という場合分けもできて個人的には
|いいなぁとは思うのですが,case-withはややこしすぎるかもしれないとい
|うのはちょっと思っています.

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

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

                                まつもと ゆきひろ /:|)

In This Thread