[#2355] [Req] Array#reverse — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

19 messages 1997/03/13
[#2357] Re: [Req] Array#reverse — matz@... (Yukihiro Matsumoto) 1997/03/13

まつもと ゆきひろです.

[#2359] Re: [Req] Array#reverse 1997/03/13

けいじゅ@SHLジャパンです.

[#2387] Kanji String — gotoken@... (GOTO Kentaro)

はじめまして、 後藤ともうします。

33 messages 1997/03/19
[#2389] Re: Kanji String — matz@... (Yukihiro Matsumoto) 1997/03/19

まつもと ゆきひろです.

[#2391] Re: Kanji String — gotoken@... (GOTO Kentaro) 1997/03/19

後藤です

[#2393] Re: Kanji String — matz@... (Yukihiro Matsumoto) 1997/03/19

まつもと ゆきひろです.

[#2465] curses library — MAEDA Shugo <ender@...> 1997/03/28

前田です。

[#2402] about TCPserver — MAEDA Shugo <ender@...>

前田です。

45 messages 1997/03/21
[#2403] Re: about TCPserver — matz@... (Yukihiro Matsumoto) 1997/03/22

まつもと ゆきひろです

[#2405] Re: about TCPserver — MAEDA Shugo <ender@...> 1997/03/23

前田です。

[#2406] Re: about TCPserver — matz@... (Yukihiro Matsumoto) 1997/03/24

[#2408] Re: about TCPserver — WATANABE Hirofumi <watanabe@...> 1997/03/24

わたなべです.

[#2411] Re: about TCPserver — MAEDA Shugo <ender@...> 1997/03/24

前田です。

[#2417] Re: about TCPserver — matz@... (Yukihiro Matsumoto) 1997/03/25

まつもと ゆきひろです.

[#2425] Re: about TCPserver — MAEDA Shugo <ender@...> 1997/03/25

前田です。

[#2439] url escape — gotoken@... (GOTO Kentaro)

どシロウトの後藤です.

57 messages 1997/03/27
[#2451] Re: url escape — sinara@... 1997/03/27

原です。

[#2455] class design (Re: url escape) — matz@... (Yukihiro Matsumoto) 1997/03/27

まつもと ゆきひろです

[#2471] Re: class design (Re: url escape) — sinara@... 1997/03/28

原です。

[#2487] Re: class design (Re: url escape) — matz@... (Yukihiro Matsumoto) 1997/03/29

まつもと ゆきひろです

[#2510] Re: class design (Re: url escape) 1997/03/30

けいじゅ@SHLジャパンです.

[#2603] Re: class design (Re: url escape) — sinara@... 1997/04/04

原です。

[#2505] Re: WWW library (Re: class design) — Shin-ichiro Hara <sinara@...>

原です。

15 messages 1997/03/30

[ruby-list:2397] Re: eval()'s context

From:
Date: 1997-03-20 15:59:45 UTC
List: ruby-list #2397
けいじゅ@SHLジャパンです. 

In [ruby-list :02395 ] the message: "[ruby-list:2395] Re: eval()'s
context ", on Mar/20 03:07(+0200) Shin-ichiro Hara
<sinara@blade.nagaokaut.ac.jp> writes:

>そういえば binding を使ったことがなかった。(^^;
>どうやって使うんでしょう。
>例をあげていただくとありがたいのですが。

実用的な例としては, debug.rb が使っているらしいです.

>> eval()を用いたメソッド定義って2段階にトリッキーなのであまり使っている
>> 人はいないでしょうね.
>> 
>> 1段目: クラス文(class ...)によるクラス定義は複数できる.
>
>これは eval を使わなくてもそうですよね。例えば、

(中略)

>みたいに続けて定義できるということですよね。
>そういう事じゃないのかな。

そうです. 原さんはともかくとして知っている人は少ないんじゃないかと思っ
たわけです. 

でも, これって既存クラスへのメソッド追加であって, 新規クラスの場合は関
係なかったですね.

>> 2段目: evalを用いれば, 動的に(文字列から)メソッド/クラスを定義できる. 

>これも「文字列から」という点では eval だけど、「動的に」という点では
>eval の特徴ではないですよね。

(中略)

>とうコードは成立する。

確かにこれも動的なメソッド定義ですね. 私の表現が悪かったです. 次のメイ
ルの最後の例にあるような 動的にメソッド定義文を生成するようなことに
evalを用いることができるといいたかったのでした.

In [ruby-list :02396 ] the message: "[ruby-list:2396] Re: eval()'s
context ", on Mar/20 04:36(+0200) Shin-ichiro Hara
<sinara@blade.nagaokaut.ac.jp> writes:

(中略)

>でも、次の例を考えて石塚さんの言っている意味も
>分かった気がしました。
>
>$input = "abc"
>def bar
>  print "input = #$input\n"
>end
>$input = "efg"
>bar # => input = efg

>$input = "abc"
>eval("def bar
>  print \"input = #$input\n\"
>end")
>$input = "efg"
>bar # => input = abc


ところで現在, 私はソケットの通信プロトコルを簡単に定義できて通信が行え
るようなライブラリを作成中なのですが, その中の機能の一つとしてプロトコ
ル仕様をpack/unpackのフォーマットの拡張として与えると, ソケットの
read/writeのrubyメソッドを動的に生成するような機能があります.

例えば, "na$1"という拡張フォーマットは, $1は最初の"n"の中身を意味して
います. つまり,

  [size|size長の文字列]

というプロトコルを意味しています. 

"na$1" から 次のような ruby関数の文字列を生成します.

  def self.get
    v1, = read(2).unpack(n)
    v2, = read(v1).unpack("a#{v1}")
    [v1, v2]
  end

で, これを evalして 実際にメソッドを定義しています. この例はevalを用
たかなり動的なメソッド定義の例になっています.

とここまでかいていて気づきましたが...

新しいeval()では, 特異メソッドの定義はできなくなるなんてことはないです
よね??

つまり:

class Foo
  def foo
    eval "def self.bar ... end"
  end
end

f = Foo.new
f.foo

と実行すると, f.bar() はちゃんと定義されますでしょうか??

evalの中では名前空間が変わっているだけで変数のバインディングは変更がな
いので問題ないのかなあ??

__
.....................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----

In This Thread