[#17615] substitution at when-clause — Takaaki Tateishi <ttate@...>
立石です.
まつもと ゆきひろです
At Tue, 2 Jul 2002 02:54:01 +0900,
まつもと ゆきひろです
At Tue, 2 Jul 2002 13:30:17 +0900,
まつもと ゆきひろです
立石です.
まつもと ゆきひろです
青山です。
立石です.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
At Wed, 3 Jul 2002 17:48:58 +0900,
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#17625] Re: Getting CGI arguments as scalars — Wakou Aoyama <wakou@...>
青山です。
[#17662] update irb to cvs repository — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
In article <200207041003.TAA06746.keiju@ishitsuka.com>,
けいじゅ@日本ラショナルソフトウェアです.
[#17676] generation GC — Minero Aoki <aamine@...>
あおきです。
[#17706] self in block — masaki <GEC01122@...>
[#17714] Re: self in block — masaki <GEC01122@...>
[#17722] Re: self in block — masaki <GEC01122@...>
[#17725] Re: self in block — masaki <GEC01122@...>
まつもと ゆきひろです
In article <1027176584.577546.14709.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
At Sun, 21 Jul 2002 01:10:02 +0900,
まつもと ゆきひろです
[#17730] Re: self in block — masaki <GEC01122@...>
At Sat, 20 Jul 2002 21:27:58 +0900,
高橋征義です。
けいじゅ@日本ラショナルソフトウェアです.
[#17764] Re: self in block — masaki <GEC01122@...>
まつもと ゆきひろです
In article <1027383423.558649.31176.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1027404202.545188.1283.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1027406979.880878.1358.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1027409151.187595.1406.nullmailer@picachu.netlab.jp>,
前田です。
In article <87bs8xkfqr.wl@studly.priv.netlab.jp>,
前田です。
[#17774] Re: self in block — masaki <GEC01122@...>
[#17832] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#17840] Re: new mathn [Re: Rational#to_int ← String#center] — keiju@... (石塚圭樹)
けいじゅ@日本ラショナルソフトウェアです.
[#17851] undef_method ? — Shin-ichiro HARA <sinara@...>
原です。
[#17855] non-blocking IO — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
[#17867] parenthesize argument(s) for future version — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
[ruby-dev:17763] Re: self in block
高橋征義です。
masaki <GEC01122@nifty.ne.jp>さん:
> 私は eval を利用して、実質的には希望している通りの block 構文
> を作って積極的に多用しています。
> 私にとっては、これが使えなかったら、Ruby を使う意味がないと思う位
> のものです。
むむ、そうですか。
eval系メソッドが好きで、これがなくっちゃ、という方もわりといるみたい
ですよね。
# あおきさんやあづみさんがその口でしたっけ。
> 勿論、私にとって merit のほうが圧倒的に大きくても、他の人には
> 致命的な demerit があるようだったら困るわけなので、 その望ましく
> ないという具体例をあげてもらえないでしょうか?
んー、何やら釈迦に説法的な物言いになってしまいそうですが、書いて
みます。
問題になりそうなものとしてすぐに思いつくのは、あるオブジェクトの
値を操作する際に別の操作を行うようになっている場合、でしょうか。
class Foo
## 代入時にはログを吐かせる
def param1=(val)
@param1 = val
write_log("@param1: #{val}\n")
end
## 他の変数と同期させる必要がある
def param2=(val)
@param2 = val
sync_some(@param2, @param2a)
end
## サニタイジング(無毒化)する
def param3=(val)
@param3 = sanitise_some(val)
end
## 上記の各変数とは関係のないはずの処理
def some_method(&block)
yield(@param_x)
end
end
このような場合、「ついうっかり」@param1や@param2や@param3を
いじってしまった場合、予期せぬことが起きてしまうかもしれません。
例えば3番目の例で、CGIなどで入力時にサニタイジングするように
していたのに、foo.some_method{<a> @param3 = "foo&bar"} といった
サニタイジングされない代入が可能になってしまい、クロスサイト
スクリプティング脆弱性ができてしまうかもしれません。
# いやまあ入力時にチェックするより出力時にサニタイジングする
# のが基本だろ!と言われそうですが、それは言わない約束です。
そんな「うっかり」をする方が悪い、という話もありますが、そういう
「うっかり」をなくすための技法が、モジュール単位で情報を管理する
というものだったはずです。上の例だと、
* Fooクラスを作る人は気をつける必要があるけれど、
* Fooクラスを使う人は気にしなくても安心、
という区別が期待されているわけですよね。その線引きが、{<....> .... }
というブロックを導入することによって狂ってしまうわけです。
> "initialize に {<x,...> ...} の形で与えられた block に対しては、
> その context を、initialize の中での context にする。
> $SAFE=1 のときにはこの機能は使えない。"
>
> initialize の段階では単に設定をするだけなので、まず危険なことは
> なさそうだと思いますが如何でしょう。
うーん、なんだか「RCRシンドローム」っぽいように思えます。
http://www.ruby-talk.com/15226
なんとなくですが、「他の言語などで使える便利な機能をRubyに導入したい。
導入すればRubyがもっと便利になるだろう。それはRubyを少しいじれば導入
できそうだ。だからRubyを変更してみてはどうだろう」……という風に見え
るのです。
しかし、その「少し」というのが曲者で、少しいじっただけでもRubyの
デザインのバランスが崩れてしまうかもしれません。いっそのこと、少し
だけいじって微妙な例外を増やすより、大きく変えた方がいいこともある
でしょう。そもそも「便利な機能」そのものがRubyのデザインを歪ませて
しまうことだってありえます。
というわけで、はやる心はおさえて、もうちょっと「Rubyの気持ち」に
なって考えてあげた方が、しっくりくる解決法が見つけやすくなるん
じゃないかと思います。
# 抽象的(というよりほとんど意味不明かも……)な言い方ですみません。
高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp