[#19261] lstripped here-document (Re: comments and continuing strings on the next line) — nobu.nakada@...

なかだです。

29 messages 2003/01/01
[#19360] Re: lstripped here-document (Re: comments and continuing strings on the next line) — "K.Kosako" <kosako@...> 2003/01/15

nobu.nakada@nifty.ne.jpさんの

[#19361] Re: lstripped here-document (Re: comments and continuing strings on the next line) — "NAKAMURA, Hiroshi" <nakahiro@...> 2003/01/15

なひです。

[#19364] Re: lstripped here-document (Re: comments and continuing strings on the next line) — nobu.nakada@... 2003/01/17

なかだです。

[#19366] Re: lstripped here-document (Re: comments and continuing strings on the next line) — "NAKAMURA, Hiroshi" <nakahiro@...> 2003/01/17

なひです。

[#19299] [BUG] errno == 0 — Kazuhiro Yoshida <moriq@...>

もりきゅうです。win32だけかもしれません。

22 messages 2003/01/04
[#19301] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

こんにちは、なかむら(う)です。

[#19302] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

こんにちは、なかむら(う)です。

[#19303] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

こんにちは、なかむら(う)です。

[#19304] Re: [BUG] errno == 0 — "U.Nakamura" <usa@...> 2003/01/04

こんにちは、なかむら(う)です。

[#19306] Re: [BUG] errno == 0 — nobu.nakada@... 2003/01/05

なかだです。

[ruby-dev:19278] Re: ruby-1.8.0 / yield(nil)とyield()のちがい

From: Tanaka Akira <akr@...17n.org>
Date: 2003-01-01 13:15:02 UTC
List: ruby-dev #19278
In article <1041420724.492653.22355.nullmailer@picachu.netlab.jp>,
  matz@ruby-lang.org (Yukihiro Matsumoto) writes:

> |したがって、wrapper に |*a| を使うのは無謀なのだろう、というのが私の印
> |象です。そして、だからこそ、wrapper を作るときには |a| で受けるしかな
> |いんじゃないのか、というのが私の立場です。
> 
> うーん、そうなのかなあ。

少なくとも現時点において確実に動く wrapper を作るには。

ここもそうだし、LocalJumpError のところもそうだった気がしますが、drb
は Ruby の仕様の不安定な所に依存している気がしますね。

> やっとわかりました。そうすると、やはり*aで受けて*aで渡すとい
> うのは不適切なのかなあ。でも、今度はyield nilとyieldの区別が
> つかないしなあ(区別する必要はないような気もしますが)。

yield は return と同様に一つの値しか扱えない、と(私は)理解しているので、
値を指定しなければ nil を指定したことになるのは自然だ、と思っています。
ただ、1.6.8 で yield *[] と yield *[nil] を区別できるということを知っ
てしまったのでその理解は揺らいでますが。

(む。return *[] は [] を返して、return *[nil] は [nil] を返すけど、こ
れは意図されているのかなぁ。)

それはそれとして、もし可能なら、*a のほうがいいと思います。*a のほうが
直観的だと思うので。

ここで、直観的というのは、私が以前同じような議論を持ちかけたときに私も
wrapper は *a で実現できるものだと思っていたこと、原さんもそういう誤解
をしたと言っていたような気がすること、咳さんも(誰に教えられるでもなく)
*a を使っていること、メソッドの引数の転送には *a を使うことからの類推
がきくこと、というあたりが根拠です。

だから、人間の直観のとおりに動くことを標榜する Ruby としては、可能なら
そうしたほうがいいと思います。ついでにいえば、このへんを完全に理解する
ことは非常に困難であり、仮に理解したとしても今回のように変化することか
ら、必然的に繰り返し驚かされる上、理解したからといってたいして役にたつ
わけじゃないですし。たぶん。

ただ、ここでいう「可能なら」というのはそのためにどの程度の犠牲を払うか
という問題なわけで、少なくとも互換性がいくつかの点で犠牲になることはほ
ぼ確実でしょう。また、(毎日 wrapper みたいなメタなことばかり書くわけじゃ
ないですから)普段の生活におけるトータルな使いやすさに関して考慮が必要
です。

で、普段の生活における使いやすさに関する話が

> こうすると、その延長線上として
> 
>   *a = [1,2]
> 
> が[[1,2]]となることとなり、結果として「配列でエミュレートさ
> れている多値戻り値」が使えなくなると思います。ちゃんとした多
> 値を導入するとかいう話もありえないではないですが。

というところなわけですが、返り値も多値にしてしまう(つまりちゃんとした
多値を導入する)か、あるいはそうしなくても

  *a = *[1,2]

って書けばいいからそれほど使い勝手は変わらないんじゃないか、と思ってい
ます。

もちろん、wrapper を *a で書けるようにするためにそこまでの犠牲(コスト)
を払うのか、という話が最後にあるわけですけど。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread