[#17615] substitution at when-clause — Takaaki Tateishi <ttate@...>

立石です.

47 messages 2002/07/01
[#17619] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/01

まつもと ゆきひろです

[#17621] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

At Tue, 2 Jul 2002 02:54:01 +0900,

[#17622] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17624] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

At Tue, 2 Jul 2002 13:30:17 +0900,

[#17627] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17630] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/02

立石です.

[#17631] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/02

まつもと ゆきひろです

[#17635] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/03

立石です.

[#17639] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/03

まつもと ゆきひろです

[#17644] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17645] Re: substitution at when-clause — matz@... (Yukihiro Matsumoto) 2002/07/03

まつもと ゆきひろです

[#17647] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17649] Re: substitution at when-clause — Takaaki Tateishi <ttate@...> 2002/07/03

At Wed, 3 Jul 2002 17:48:58 +0900,

[#17651] Re: substitution at when-clause — keiju@... (石塚圭樹) 2002/07/03

けいじゅ@日本ラショナルソフトウェアです.

[#17730] Re: self in block — masaki <GEC01122@...>

16 messages 2002/07/20

[#17764] Re: self in block — masaki <GEC01122@...>

31 messages 2002/07/22
[#17765] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17768] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027383423.558649.31176.nullmailer@picachu.netlab.jp>,

[#17769] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17770] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027404202.545188.1283.nullmailer@picachu.netlab.jp>,

[#17771] Re: self in block — matz@... (Yukihiro Matsumoto) 2002/07/23

まつもと ゆきひろです

[#17772] Re: self in block — Tanaka Akira <akr@...17n.org> 2002/07/23

In article <1027406979.880878.1358.nullmailer@picachu.netlab.jp>,

[#17832] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@...

なかだです。

17 messages 2002/07/26
[#17835] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — matz@... (Yukihiro Matsumoto) 2002/07/26

まつもと ゆきひろです

[#17837] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@... 2002/07/26

なかだです。

[#17842] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — matz@... (Yukihiro Matsumoto) 2002/07/26

まつもと ゆきひろです

[#17886] line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/02

なかだです。

[#17893] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17897] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/03

なかだです。

[#17973] Re: line number(Re: Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG.) — nobu.nakada@... 2002/08/11

なかだです。

[ruby-dev:17667] Re: blocks and local variables

From: sheepman <sheepman@...>
Date: 2002-07-04 14:26:31 UTC
List: ruby-dev #17667
こんばんは。sheepman です。

On Mon, 17 Jun 2002 21:43:25 +0900
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです
> 
> In message "[ruby-dev:17480] Re: blocks and local variables"
>     on 02/06/17, Shin Nishiyama <shin@xtal.tf.chiba-u.ac.jp> writes:
> 
> 同じアイディアはすでに提案されていますが、ネストの問題がある
> ので、ブロックローカルであることがわかったとしてもかならずし
> もうれしくないかも、という点で決定打になっていません。
> 

ブロックローカル変数名に固有のシンタックスを付与する案の
ひとつとして、変数の後ろに @ を付けるというのはどうでしょうか。

a=1
hoge(){|i|
  val@ = a
  .....
}

気持ちとしては、
@hoge がある程度ひろい範囲からのアクセスを可能にし、
@@bar がさらにひろい範囲からのアクセスを可能にするので
逆に foo@ はせまい範囲からのアクセスを意味する気がしないでもない。

1.val@ は常にブロック固有の変数。

hoge(){|i|
 val@ = 1
  foo(){
    val@ = 3
  }
  puts val@ #=> 1
}

2.ネストした場合に上のブロックの変数にアクセスするには 
val@1 (1つ上のブロックの変数)、val@2 (2つ上のブロックの変数)
val@@ (上に順番に登っていって最初に一致する変数)

hoge(){|i|
  val@ = 1
  foo(){
    bar(){
      val@2 = 3
    }
  }
  puts val@ #=> 3
}

hoge(){|i|
  val@ = 1
  foo(){
    bar(){
      puts val@@ #=> 1
    }
  }
}

hoge(){|i|
  val@ = 1
  foo(){
    x = proc{puts val@@}
    @val = 3
    x.call #=> 1 (どうするのが良いんでしょう?)
  }
}

val@1 や val@2 は見た目もあんまりなので、val@@ を
使うこと推奨ということで。

#ブロックローカルな変数を最初に<x, y;a, b>で宣言するという案で
#個人的に懸念することは宣言による新しい変数の生成と
#代入による新しい変数の生成がブロックの中で混在して、
#ソースが見にくくなってしまうのではないかということです。

それでは。


-- 
sheepman / TAMURA Takashi
sheepman@tcn.zaq.ne.jp http://www.tcn.zaq.ne.jp/sheepman/
Key fingerprint = 4E13 FE38 CD73 48D3 38AE  00EE 9E28 F98B D569 848E

In This Thread

Prev Next