[#34722] cgi.rb の form の挙動 — FUJIOKA Takeyuki <fujioka@...>

藤岡です。

18 messages 2002/04/02

[#34724] 「たのしい Ruby 」 — Shin-ichiro HARA <sinara@...>

原(信)です。

18 messages 2002/04/02
[#34728] Re: 「たのしい Ruby 」 — matz@... (Yukihiro Matsumoto) 2002/04/02

まつもと ゆきひろです

[#34746] Re: 「たのしい Ruby 」 — TAKAHASHI Masayoshi <maki@...> 2002/04/02

高橋征義です。

[#34752] Re: 「たのしい Ruby 」 — Shin-ichiro HARA <sinara@...> 2002/04/03

原(信)です。

[#34842] [ann] Web 家計簿(β版)リリース — 堀川 久 <vzw00011@...>

こんにちは。

18 messages 2002/04/07
[#34869] Re: [ann] Web 家計簿(β版)リリース — Nobuhide Kanagawa <nobuhide@...> 2002/04/11

こんばんわ!

[#34885] creating a scope / anonymous module — Takaaki Tateishi <ttate@...>

立石です.

38 messages 2002/04/13
[#34891] Re: creating a scope / anonymous module — nobu.nakada@... 2002/04/14

なかだです。

[#34892] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/14

At Sun, 14 Apr 2002 18:00:12 +0900,

[#34894] Re: creating a scope / anonymous module — nobu.nakada@... 2002/04/14

なかだです。

[#34896] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/14

At Sun, 14 Apr 2002 21:08:47 +0900,

[#34899] Re: creating a scope / anonymous module — matz@... (Yukihiro Matsumoto) 2002/04/15

まつもと ゆきひろです

[#34901] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/15

At Mon, 15 Apr 2002 09:51:05 +0900,

[#34902] Re: creating a scope / anonymous module — matz@... (Yukihiro Matsumoto) 2002/04/15

まつもと ゆきひろです

[#34903] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/15

At Mon, 15 Apr 2002 13:53:53 +0900,

[#34904] Re: creating a scope / anonymous module — matz@... (Yukihiro Matsumoto) 2002/04/15

まつもと ゆきひろです

[#34910] Re: creating a scope / anonymous module — Takaaki Tateishi <ttate@...> 2002/04/15

At Mon, 15 Apr 2002 15:07:57 +0900,

[#34958] windows 版 ruby でシステムコマンドが動かない — "jazzski _comp" <jazzski_comp@...>

はじめてrubyを使うのですが、windows版(cygwin版1.6.1)で下記のように

12 messages 2002/04/23

[ruby-list:34901] Re: creating a scope / anonymous module

From: Takaaki Tateishi <ttate@...>
Date: 2002-04-15 04:45:55 UTC
List: ruby-list #34901
At Mon, 15 Apr 2002 09:51:05 +0900,
> さて、言語仕様を追加したい場合には
>   * その仕様を追加するとどんな問題が解決できるのか

変数のスコープだけを明示的に作ることができるので,意図しない他の変数
との衝突を心配したり,不必要に変数名を変える必要がなくなります.

stack = []
foo {
  msg1 = ...
  ... # ここでいろいろ処理を行う
  stack.push( proc{ print(msg1, "\n") } )

  msg2 = ....
  ... # ここでいろいろ処理を行う
  stack.push( proc{ print(msg2, "\n") } )
}

このようなものを

foo {
  local
    msg = ...
    ... # ここでいろいろ処理を行う
    stack.push( proc{ print(msg, "\n") } )
  end

  local
    msg = ....
    ... # ここでいろいろ処理を行う
    stack.push( proc{ print(msg, "\n") } )
  end
}

などと記述できます.

>   * その仕様によって新たな問題が導入されないか
>   * その言語仕様が言語全体に及ぼす影響

local...endだと問題ありました.例えば,

a = 0
f = nil
local
  a = a + 1
  f = proc{ a }
end
(想定していたものだと f も nil のままでした… これだと使い難い)

そのため,let..in...end を提案します.

> などが重要です。私自身は新井さんが[ruby-list:34895]で紹介し
> てくださったようなブロックローカルであることが保証されるブロッ
> クパラメータしか考えていません。これだって採用するのに踏み切
> れないでいるんですが。

ブロックとスコープが一対になっているところが使いにくい点だと思っている
のでむしろ,

let
  a = 1  # 代入しか行えない
in
  ...
end

などを導入すると良いのではないかと考えています.一つ例を挙げます.

a = 0
b = 0
let
  a = a + 1
in
  b = 1
  .... # a は 1
end
...    # a は 0, b は 1

これを使うと,新井さんが[ruby-list:34895]で紹介したものを次のように
して実現できることを狙っています.

foo {
  let
    var = ...
  in
    ...
  end
}

異なる点はブロックとは関係なく使えるという点です.最初,この方法を提案
しようと思ったのですが,rubyの場合,変数の宣言だけを書くと言うことが今
までなかったので

foo {
  local
    var = ...
  end
}

でもいいのではないかと思って最初に投稿したようなlocal...endのものを提案
してしまいました.

> 立石さんが望むことを実現する「言語仕様」はどのようなものであ
> るか具体的になれば評価もできるのではないかと思います。

いくつかの例を示すということで良いでしょうか?

-- 1 --
a = 0
let
  a = 1
in
  ...
end
p a # => 0

-- 2 --
let
  a = 1
in
  ...
end
p a # undefined

-- 3 --
a = 0
b = nil
let
  a = a + 1  # 右辺のaは外のスコープに属するもの
in
  b = proc{ a }
end
p b.call     # => 1

-- 4 --
a = 0
let
  a = a + 1  # 右辺のaは外のスコープ
  b = a + 1  # 右辺のaは一つ上で定義されたa 又は 外のスコープのa (どちらでもいいです)
in
  p a    # => 1
  p b    # => 1 or 2
end

このようなものを望んでいます.
-- 
Takaaki Tateishi <ttate@kt.jaist.ac.jp>

In This Thread