[#25808] break & retry in block — Shin-ichiro HARA <sinara@...>

原です。

15 messages 2005/03/04

[#25812] Re: [ruby-cvs] ruby/test/ruby, ruby/test/logger, ruby/sample, ruby/misc, ruby/lib/xmlrpc, ruby/lib/wsdl/soap, ruby/lib/rexml, ruby/lib/rdoc/parsers, ruby/lib/rdoc/generators, ruby/lib/irb, ruby/lib, ruby/ext/zlib, ruby/ext/win32ole, ruby/ext/tk, ruby/ext/strscan, ruby/ext/socket, ruby/ext/readline, ruby/ext/pty, ruby/ext/openssl, ruby/ext/iconv, ruby/ext/etc, ruby/ext/dl, ruby/ext/curses, ruby/ext/bigdecimal, ruby/ext/Win32API, ruby: * array.c: replace rb_protect_inspect() and rb_inspecting_p() by — Tanaka Akira <akr@...17n.org>

In article <20050304064753.53859C671F@lithium.ruby-lang.org>,

3 messages 2005/03/06

[#25853] conflict method and local variable — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

56 messages 2005/03/10
[#25854] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/10

まつもと ゆきひろです

[#25855] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/10

永井@知能.九工大です.

[#25856] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/10

まつもと ゆきひろです

[#25857] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25858] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/11

まつもと ゆきひろです

[#25861] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25863] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/11

まつもと ゆきひろです

[#25864] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25865] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/11

まつもと ゆきひろです

[#25866] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/11

永井@知能.九工大です.

[#25869] Re: conflict method and local variable — Shugo Maeda <shugo@...> 2005/03/13

前田です。

[#25875] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/13

まつもと ゆきひろです

[#25878] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/13

永井@知能.九工大です.

[#25882] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/13

まつもと ゆきひろです

[#25884] Re: conflict method and local variable — Hidetoshi NAGAI <nagai@...> 2005/03/14

永井@知能.九工大です.

[#25885] Re: conflict method and local variable — Yukihiro Matsumoto <matz@...> 2005/03/14

まつもと ゆきひろです

[#25888] Re: conflict method and local variable — Shugo Maeda <shugo@...> 2005/03/14

前田です。

[#25946] ext/tk/sample/**/*.gif are broken — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

16 messages 2005/03/27

[#25959] some trouble on ext/tk/sample — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

20 messages 2005/03/29
[#25969] Re: some trouble on ext/tk/sample — Hidetoshi NAGAI <nagai@...> 2005/03/30

永井@知能.九工大です.

[#25970] Re: some trouble on ext/tk/sample — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/03/30

山本です。

[#25973] Re: some trouble on ext/tk/sample — Hidetoshi NAGAI <nagai@...> 2005/03/31

永井@知能.九工大です.

[ruby-dev:25857] Re: conflict method and local variable

From: Hidetoshi NAGAI <nagai@...>
Date: 2005-03-11 02:25:16 UTC
List: ruby-dev #25857
永井@知能.九工大です.

From: Yukihiro Matsumoto <matz@ruby-lang.org>
Subject: [ruby-dev:25856] Re: conflict method and local variable
Date: Fri, 11 Mar 2005 03:42:30 +0900
Message-ID: <1110480148.060254.18387.nullmailer@x31.priv.netlab.jp>
> 「ファイルを跨いでいる」というと重大な欠点のように聞こえます
> が、それってそもそも eval IO.readlines(path) などと、ある意
> 味普通でないことをやっているせいですから、ここでは置いておき
> ませんか。

「普通でない」というのは確かにその通りですね.

>           確かに互換性はないのですが、ことファイルを読み込ん
> でevalするテクニックに関しては、あんまり支援したい気持ちがな
> いのが正直なところです。

そうでしょうねぇ...
危ないのは確かですから,使わない方が望ましいのだとは思います.

> しかも、Ruby/Tkの場合、ブロックでレシーバをすりかえて、関数
> 的メソッドでプロパティを指定するという、別の意味で「きれいで
> ない」やり方をしていることとの組み合わせで問題が発生している
> わけですよね。そういう設計をしてしまったのは私なんですが。

例では eval まで絡んでましたが,上記の方法で書いている場合は
eval と無関係に面倒が起こりえる話ですね.
例えば最初は
------------------------------------------
cursor = txt.cget('cursor')
TkTextWindow.new($twind_text, 'end', 
                 'window'=>TkButton.new($twind_text) {
                   text 'オン'
                   command proc{textWindOn $twind_text,$twind_buttons}
                 })
txt.cursor(cursor)
------------------------------------------
としていたものを変更してボタンウィジェット上では cusor を
変更するようにしたいと思った場合,
------------------------------------------
cursor = txt.cget('cursor')
TkTextWindow.new($twind_text, 'end', 
                 'window'=>TkButton.new($twind_text) {
                   text 'オン'
                   command proc{textWindOn $twind_text,$twind_buttons}
                   cursor 'top_left_arrow'
                 })
txt.cursor(cursor)
------------------------------------------
と変更することはできず,cursor の変数名を変えるか,
そこだけ self.cursor('top_left_arrow') とするか,
TkButton.new の引数として与えるか,
あるいは大きく書き換えてしまうかというように
美しくない作業をしなければならなくなります.

ここでは Ruby/Tk を例にしていますが,instance_eval を使う場所では
注意しなければならない問題ですよね?
「危険だから instance_eval の中では self を省略するな」というように
啓蒙するという考えもあるかとは思います.

# lambda が代入されたローカル変数として扱われるものかどうかが
# 変数名で区別できるのならいいのですが...

> 互換性を気にしなくてもよいはずの1.9で、この「美しくないふた
> つ」が組み合わさってはじめて発生する問題を回避する必要がどれ
> だけあるのか私には疑問です。1.9のRuby/Tkでは
> 
>   TkTextWindow.new($twind_text, 'end', 
>                    window: TkButton.new($twind_text,
>                                         text: 'オン',
>                                         command: proc{textWindOn $twind_text,$twind_buttons},
>                                         cursor: 'top_left_arrow'))
> 
> というキーワード引数を使うスタイルを推奨したいところです。もっ
> とも、現時点ではキーワード引数は1.9でも実装されていないんですが。

私自身はブロックを使う方法はあまり好きではないので
もっぱら Hash で与えることの方が多いんですが,
ブロックを使う方が好きという方もいらっしゃるようですので.(^_^;

> もうちょっと考えさせてください。ローカル変数が関数的に呼び出
> される条件を工夫することで改善(ちょっとマシ化)できるかもしれ
> ません。現時点ではno ideaですが。

すみません.よろしくお願いします.
個人的には,少なくとも instance_eval の中ではレシーバの省略は
self の方を期待する方が普通のように感じています.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread