From: Minero Aoki Date: 2004-05-26T00:58:26+09:00 Subject: [ruby-dev:23620] Re: Ruby2.0 spec summary around parameters and variables 青木です。 In mail "[ruby-dev:23593] Re: Ruby2.0 spec summary around parameters and variables" Shugo Maeda wrote: > 前田です。 > > |a = 1, 2 > > | > > |もエラーということですよね? > > | > > |私も互換性を考えなければ、その方がすっきりしていいのではないかと > > |思います。 > > |ValuesをRubyレベルで見せる必要もなくなりますよね。 > > def m > > return 1,2 > > end > > > > a = m() > > > > で見えちゃいますけどね。 > > あれ、当然それも(実行時)エラーのつもりでいました。 > あおきさんの考えは違ったんでしょうか。 御推察の通りです。もともとの主張は、それも含めて全部エラーの つもりでした。つまり以下は全部エラーです。 a = Values() a = Values(1) a = Values(1,2) * = 1 a, = 1 a, b = 1 a, *b = 1 def m0() Values() end; a = m0() def m1() Values(1) end; a = m1() def m2() Values(1,2) end; a = m2() 理由は以下の四点です。 * (返り値を受けている) ソースコードの見ためだけから、 そのメソッドが単値を返しているのか多値を返しているのか 判断できてほしい。(→可読性の向上) * 同じ効果を発揮する代入に書きかたが何通りもあるのが嫌。 まつもとさんの仕様で言うと a = Values(...) と *a = Values(...) * ブロックパラメータとの違いが微妙すぎて、 早くも規則を覚えるのが嫌になった。 * 最初はできるだけ厳しい規則にしておいたほうが 互換性地獄に苦しまなくて済むだろう なお、この主張の根本原則 (理念?) は、一目瞭然ですが、単値と 多値の流通経路をきっぱり色分けするというところにあります。 もっとも、akr さんの言うように a = Values(...) で a に最初の 一個だけ入る (多値主義とでも言うのかな) という仕様もそれは それで納得できます。少なくとも、Values がそのまま入るよりは よいと思います。 ですが、少なくとも akr さんの言う理由には賛同できません。 同じ名前で返り値を増やして拡張というのは、使う側にとっては むしろ負荷が大きくなると思います。ライブラリを定義する側と 使う側とどちらが苦労すべきかと言えば、定義する側でしょう。 従って現在のところはとりあえず 「lhs = mrhs も mlhs = rhs もエラー」を主張しておきます。 ------------------------------------------------------------------- 青木峰郎