[#837] request SCAN — Shin-ichiro HARA <sinara@...>

原です。

25 messages 1997/11/14
[#838] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#839] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#840] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#841] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#843] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#844] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#845] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#864] [Req] Proc.new — Shin-ichiro HARA <sinara@...>

原です。

53 messages 1997/11/19
[#865] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#866] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/19

原です。

[#867] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#875] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#877] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#879] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#886] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#890] Re: [Req] Proc.new — keiju@... (石塚圭樹 ) 1997/11/20

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

[ruby-dev:904] Re: [Req] Proc.new

From: keiju@... (石塚圭樹 )
Date: 1997-11-20 08:20:07 UTC
List: ruby-dev #904
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :00898 ] the message: "[ruby-dev:898] Re: [Req] Proc.new
", on Nov/20 15:34(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes:

>まつもと ゆきひろです

>これは次善の策です.イテレータ引数の設定は代入(複数イテレー
>タ変数がある場合には多重代入)で行われるため,どうしてもこう
>なってしまうんです.

うーん. なるほど, 多重代入を使っていたのですか... それなら納得できます
が...

>|  bar = Proc.new { |x| p x }
>|  bar.call()      #=> nil
>|  bar.call(25)    #=> 25
>|  bar.call(25, 26)#=> 25
>|
>|の方が, 望ましい動作だと思うのですが? 
>|# って, これは今までと同じ動作か...
>
>今までは
>
>  bar.call()      #=> FALSE
>  bar.call(25)    #=> 25
>  bar.call(25,26) #=> [25,26]
>
>です.これがおかしいんで修正しようという話なんですけど.

あれ? ほんとだ... 私は2引数の場合で試したのでした...

  bar = Proc.new { |x, y| p x, y }
  bar.call()      #=> [nil, nil]
  bar.call(25)    #=> [25, nil]
  bar.call(25, 26)#=> [25, 26]
  bar.call(25, 26, 27) #=> [25, 26]

確かに多重代入ではこのような動作を行ないますね...

考えてみると多重代入って1引数と2引数で動作が違うんですね...

>この辺をなんとかしたい気もするんですが,どうするのが望ましい
>のか良く分かんないですね.イテレータ変数の設定に多重代入を使
>わなければ良いのか,多重代入の性質を変えるのが良いのか.

私は多重代入の仕様を変えるのがいいんじゃないかと思います. 1引数と2引数
で動作が違うってのもね...

配列のreturn値と多重returnを同じに扱うためにこうなっているのかなと思い
ますが, それをやめちゃえばいいんじゃないでしょうか? 多重returnしたい時
には必ず return x, y, return *array を用てもらうことにします.

さらに, これだと配列で返ってきたreturn値を複数の変数で受けることができ
なくなるので文法を拡張して:

  foo, *bar = *baz()

みたく受けとるというのはいかがでしょう?

# 仕様変更が大きいかなあ...

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

In This Thread