[#33716] Re: set_path_for_r — "HAYAMA_Kaoru" <iyamatta.hayama@...>
はじめまして、葉山と申します。
[#33732] 文字列の式展開について — Masao Mutoh <mutoh@...>
むとうです。
むとうです。
たけ(tk)です。
むとうです。
たけ(tk)です。
たけ(tk)です。
[#33736] Redefinition of builtin class — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
[#33740] Net::SMTP.start の引数 — URA Takefumi <hage@...>
浦です。
[#33762] WebDAV client — HIDAKA Takahiro <cv8t-hdk@...>
ひだかです。
こんにちは、サイトウという者です。
[#33785] NET:HTTP get2 のエラー回避 — Takashi Hoshizawa <t_hoshizawa@...>
星澤といいます。
[#33793] 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>
井上です。
早瀬@大阪大学基礎工学部情報科学科 です。
まつもと ゆきひろです
早瀬@阪大です。
In article <20020211224442.48d0e668.hayase@hcn.zaq.ne.jp>,
なかだです。
> > > あえて宣言文の途中で、代入前に変数の値を使った場合にエラーを出そうと思うと、
高橋征義です。
るびべん です:
At Tue, 12 Feb 2002 13:27:58 +0900,
Takaaki Tateishi <ttate@kt.jaist.ac.jp> wrote:
[#33795] Re: 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>
井上です。
At Fri, 8 Feb 2002 12:21:53 +0900,
[#33802] Re: 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>
井上です。
[#33807] Re: 右辺の値なしでも実行可能? — "井上 浩一" <kyoui32@...>
井上です。
jihg です。新入りです。
In article <000001c1b0c1$04eca980$b7d08bcb@soteccomputer>,
> Pseudo-Simplicity(擬似単純性)
Hiromasa KONISHIです。
jihg です。里谷がメダル取れたのはうれしい。開幕前の扱い悪かったから。明
坂野 正明と申します。
At Tue, 12 Feb 2002 19:14:03 +0900,
坂野 正明です。
At Wed, 13 Feb 2002 02:14:39 +0900,
[#33846] quickml サーバ — Satoru Takabayashi <satoru@...>
高林と申します
るびべん です:
まつもと ゆきひろです
るびべん です:
るびべん です:
こんにちは。鈴木教郎です。
[#33848] xxとして出し入れするメソッドの名前は? — Take_tk <ggb03124@...>
Apollo の話で恐縮なのですが、
[#33889] Ruby スクリプトサーバ + アプリと Apache+CGI アプリ — "井上 浩一" <kyoui32@...>
井上です。
[#33893] Re: Ruby スクリプトサーバ + アプリと Apache+CGI アプリ — "井上 浩一" <kyoui32@...>
井上です。
[#33906] Re: Ruby スクリプトサーバ + アプリと Apache+CGI アプリ — "井上 浩一" <kyoui32@...>
井上です。
[#33915] Re: Ruby スクリプトサーバ + アプリと Apache+CGI アプリ — "井上 浩一" <kyoui32@...>
井上です。
[#33926] 破壊的な代入について — Himuro UTO <himuro-uto@...>
ひむろ と申します。
[#33959] Re: Ruby スクリプトサーバ + アプリと Apache+CGI アプリ — "井上 浩一" <kyoui32@...>
井上です。
[#33962] Re: Ruby スクリプトサーバ + アプリと Apache+CGI アプリ — "井上 浩一" <kyoui32@...>
井上です。
[#33964] pdflib-0.7 PDF クラスの継承について — "Makoto Matsukawa" <racer-m@...>
初めて投稿します松川と申します。Rubyは初心者で
[#33966] 「たまてばこ」開発版が SecurityE rror — dellin <dellin@...>
dellinといいます。
なかだです。
西山和広です。
なかだです。
まつもと ゆきひろです
なかだです。
[#33988] FileTest.exist?("") の値の UNIX と Windows との違い — Akira Suzuki <a-suzuki@...>
鈴木です。
なかだです。
In article <200202210337.g1L3b0726778@sharui.nakada.kanuma.tochigi.jp>,
[#33994] Shell#expand_path に ~ の入ったパスを渡したとき — Hiroshi Saito <HiroshiSaito@...>
サイトウという者です。
[#33997] JOLT award — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#34006] for_fd したソケットの close — HIRATA Naoto <hirata-naoto@...>
平田といいます.
まつもと ゆきひろです
[#34015] 現在使用中の ruby.dll のパスは分かりますか?。 — Take_tk <ggb03124@...>
起動されたスクリプトの中から、そのスクリプトで使用中の ruby.dll のパスを
[#34021] localized document — HIDAKA Takahiro <cv8t-hdk@...>
ひだか%おもいきり現実逃避中です。
須賀です。
ひだかです。まとめて返事を書いてしまいます。
高橋征義です。
[#34030] Ruby Gem Box — Noritsugu Nakamura <nnakamur@...>
[#34053] 漢数字 -> 数 — TOYOFUKU Chikanobu <toyofuku@...>
豊福です。
豊福です。
# 本題と関係ありません。
池田と申します。
[#34056] ruby-dev summary — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
たけ(tk)です。
まつもと ゆきひろです
[#34087] already initialized constant — 島田喜郎 <shimada@...>
島田喜郎と申します。教えてください。
[#34107] File#pos とファイルへの書き込み位置との整合性 — 堀川 久 <vzw00011@...>
こんにちは。
In article <3c7c7245.7413%vzw00011@nifty.ne.jp>,
[#34127] singleton class and anonymous class — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[ruby-list:33872] Re: 変数の宣言
早瀬@阪大です。
> > 説明ありがとうございます。納得しました。動的なスコープは確かにややこしいで
> > すね。宣言文中で代入前に値が使えてしまうのが、(おもしろい|何となく気持悪い)
> > ので質問してみました。
>
> 宣言文中とは限りません。
>
> if false
> a = 1
> end
> p a
>
> とか。
宣言文が実行されなかった場合でも、変数が宣言されるという事については、
ruby-lang.org を見て理解しました。その際に、デフォルト値としてnilが用いら
れるという事も知りました。
今回興味を持ったのは、宣言文の右辺で、宣言しようとしている変数が使えるとい
う点についてです。今まで、そんなことをしようと思ったことがなかったので…。
そこで、すぐに思い付いた他の言語で、宣言文での x=x を試してみました。
# 半ば現実逃避の、いい加減な調査です
============================================
C
---hoge.c---
#include <stdio.h>
int main()
{
int x=x;
/*int x;*/
printf("%d\n", x);
return 0;
}
-----------
gcc -O2 -Wall -ansi -o hoge hoge.c
# gccでは最適化オプションをつけないとuninitialized variableを検出できない
(エラー・警告なし)
icc -w2 -o hoge hoge.c
hoge.c:
"hoge.c", line 5: remark #592: variable "x" is used before its value is set
int x=x;
^
============================================
java
---Hoge.java---
class Hoge
{
static public void main(String argv[])
{
int x=x;
}
}
---------------
javac Hoge.java
Hoge.java:5: 変数 x は初期化されていない可能性があります。
int x=x;
^
エラー 1 個
============================================
% sml
Standard ML of New Jersey, Version 110.0.3, January 30, 1998 [CM; autoload enabled]
- val x=x;
stdIn:17.7 Error: unbound variable or constructor: x
============================================
emacs lips(xemacs)
(let '(x x) x)
Symbol's value as variable is void: x
(setq x x)
Symbol's value as variable is void: x
============================================
% irb
irb(main):001:0> defined?(x)
nil
irb(main):002:0> x=x
nil
irb(main):003:0> defined?(x)
"local-variable"
irb(main):004:0> defined?(X)
nil
irb(main):005:0> X=X
NameError: uninitialized constant X
from (irb):5
irb(main):006:0> defined?(X)
nil
irb(main):007:0> defined?($x)
nil
irb(main):008:0> $x
nil
irb(main):009:0> $x=$x
nil
irb(main):010:0> defined?($x)
"global-variable"
# インスタンス変数とクラス変数も、未定義時に参照した時の値が定義されている
# ので、グローバル変数と同じ
============================================
gccで、int x; とした場合にはgccは、
hoge.c: In function `main': hoge.c:6:
warning: `x' might be used uninitialized in this function
という警告を発することができたのですが、int x=x; では警告も出なくなってし
まいます。これは、コンパイラの実装の問題ですが、ちょっと意外でした。
javaについては、ご指摘いただいた、
> ちなみに、Java では初期化されていない可能性がある変数を参照することを
> 禁止しています。Definite Assignment というやつですが、このようなことに
> 興味を持つなら言語仕様を読んでみるとおもしろいかも知れません。
という点でエラーとなっています。右辺で宣言中の変数を使うことそのものについ
ては禁止されていないようです。(int x=x=1 ならばエラー無くコンパイル出来る)
SML/NJやelispは、動的スコープ(というか環境?)なので、代入…じゃなくて定義前
に変数の値を使うことは出来ませんね。(あ、setqは代入でいいのか…)
ということで私の期待に反し(?)、CとJavaでは、初期値計算の前に名前が登録され
るようです。コンパイラの処理を考えてみれば、型と変数名が現れた時点でスコー
プに登録するのが自然なので、ある意味当然の結果かも知れません。
# Javaはともかく、Cは仕様書(またはそれに準ずるもの)に当るのが正しいと思う
# のですが、手をぬいてしまいました。
静的スコープを持つが、宣言しようとしている変数を初期値計算に使えない言語
をご存じの方がいらっしゃいましたら、教えていただけると嬉しいです。
--
早瀬 康裕
大阪大学基礎工学部情報科学科数理科学コース