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

From: Takaaki Tateishi <ttate@...>
Date: 2002-07-03 02:36:34 UTC
List: ruby-dev #17635
立石です.

# すいません,反論ばかりになってしまいますが…

At Wed, 3 Jul 2002 08:45:21 +0900,
> 必ずしもそうではないでしょう。===のレシーバはwhenに指定した
> オブジェクトですから。こちらにはユーザ定義でないオブジェクト
> (整数とか文字列とか正規表現とかクラスとか)を使うことが普通で
> しょうから、「良くない」とまでは言えないと思います。逆に必ず

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

> 正直、 === がどちらをレシーバにするかを覚えておくのは結構面
> 倒なようで、間違って逆に覚えている人をみかけます。となると、
> ===を使うことを積極的に考える必要があるとなるとcaseの難しさ
> がより増えてしまうような。

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

> 「===がtrue/false以上の情報を返す」のは「その情報を利用して
> もらいたい」あるいは「その情報を利用すると便利なケースがある」
> と設計者/実装者が思ったことを意味するということには同意しま
> す。しかし、それをcase文の内部で暗黙に呼び出したときにまで
> 利用することを期待しているかどうかは別です。むしろ、case文を

=== はcase文のためにあるものと思っていたのですが…

> 立石さんの提案するcaseのような制御構造があってはいけないとは
> 言いませんが、採用するならcaseを拡張するのではなく
> 
>   * 呼び出すメソッドを明示的に指定する
>   * caseではない全然別の予約語を使う
> 
> 新しい文法にした方が良いと思います(Perl6にならってgivenとか)。
> 個人的にはそこまでの価値は無いような気もしますが。

結局場合分けなので,caseの拡張が良いと思っています.

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

上記の式を,つぎのように書けるのは同じメソッド名や式を何度も書か
ずに済むので楽だし,同じ計算を何度も行わないような効率化のためか
ら一度変数へ結果を代入するという手間も省けます.
case文が計算結果を用いた条件分岐だという意味からは外れないと僕は
思っています.

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

これだと,「foo()がnilでない場合」という場合分けになります.
そして,これができると,

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

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

ちなみに,'<'などを使いたいという話は以前ありましたね.
そのときは,when節で'<'などを指定する話だったと思いますが,記憶違い
かもしれません.
-- 
Takaaki Tateishi <ttate@kt.jaist.ac.jp>

In This Thread