[#39325] File.fnmatch の改良について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
はじめまして、山本です。
18 messages
2004/03/05
[#39326] Re: File.fnmatch の改良について
— "U.Nakamura" <usa@...>
2004/03/05
こんにちは、なかむら(う)です。
[#39329] Re: File.fnmatch の改良について
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/05
山本です。
[#39331] Re: File.fnmatch の改良について
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/05
山本です。
[#39335] Re: File.fnmatch の改良について
— "U.Nakamura" <usa@...>
2004/03/05
こんにちは、なかむら(う)です。
[#39347] Windows上でRuby+MySQL — Dan Yamamoto <dango@...>
団と申します。
9 messages
2004/03/09
[#39348] Re: Windows上でRuby+MySQL
— とみたまさひろ <tommy@...>
2004/03/09
とみたです。
[#39349] Re: Windows上でRuby+MySQL
— Yamamoto Dan <dango@...>
2004/03/09
団です。
[#39352] 1.8 の irb/completion.rb の挙動の違い — Wataru Gotoh <gotow@...>
後藤@北の方と申します。
1 message
2004/03/09
[#39367] [ANN] Nora 0.0.20040310 released — MoonWolf <moonwolf@...>
MoonWolfです。
1 message
2004/03/10
[#39383] Re: win32ole でexcel が終了しない — g-1@...5.so-net.ne.jp
中です。
7 messages
2004/03/18
[#39401] rubyの関数定義について — "yokoyama" <yokoyama@...0038.net>
はじめましてyokoyamaと申します。
11 messages
2004/03/21
[#39403] Re: rubyの関数定義について
— rubikitch <rubikitch@...>
2004/03/21
From: "yokoyama" <yokoyama@mf.0038.net>
[#39423] 例えば "26" を "&" に変換したい(sub, hex, pack) — 若宮 修司 <gba02077@...>
皆さん、初めまして。
5 messages
2004/03/23
[#39427] require 'cal'をexe化すると終了時にアプリケーションエラー — katata@...
どうもTa3と申します。
4 messages
2004/03/23
[#39429] trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
18 messages
2004/03/23
[#39454] Re: trial version of Ruby/Tk
— "Shirai,Kaoru" <shirai@...>
2004/03/31
白井です。
[#39460] Re: trial version of Ruby/Tk
— Hidetoshi NAGAI <nagai@...>
2004/04/01
永井@知能.九工大です.
[#39465] Re: trial version of Ruby/Tk
— "Shirai,Kaoru" <shirai@...>
2004/04/01
白井です。
[#39466] Re: trial version of Ruby/Tk
— Hidetoshi NAGAI <nagai@...>
2004/04/01
永井@知能.九工大です.
[#39467] Re: trial version of Ruby/Tk
— Hidetoshi NAGAI <nagai@...>
2004/04/01
永井@知能.九工大です.
[#39469] Re: trial version of Ruby/Tk
— "Shirai,Kaoru" <shirai@...>
2004/04/01
白井です。
[#39474] Re: trial version of Ruby/Tk
— Hidetoshi NAGAI <nagai@...>
2004/04/02
永井@知能.九工大です.
[#39476] Re: trial version of Ruby/Tk
— "Shirai,Kaoru" <shirai@...>
2004/04/02
白井です。
[#39482] Re: trial version of Ruby/Tk
— Hidetoshi NAGAI <nagai@...>
2004/04/02
永井@知能.九工大です.
[#39431] 「RPGツクール」の最新版にRubyが使われているそうですね — cyross@...
お久しぶりです。
6 messages
2004/03/23
[#39440] Amritaで複数行(<tr>)を繰り返したい — ITO Asuka <asuka@...>
伊藤と申します。
5 messages
2004/03/25
[#39444] gethostbynameでホスト名が引けない — 堀川 久 <vzw00011@...>
こんにちは。
11 messages
2004/03/28
[#39446] Re: gethostbynameでホスト名が引けない
— matz@... (Yukihiro Matsumoto)
2004/03/28
まつもと ゆきひろです
[#39450] Re: gethostbynameでホスト名が引けない
— 堀川 久 <vzw00011@...>
2004/03/30
こんにちは。
[#39451] Re: gethostbynameでホスト名が引けない
— matz@... (Yukihiro Matsumoto)
2004/03/30
まつもと ゆきひろです
[#39448] [ANN] Rubyお花見@井の頭公園 — TAKAHASHI Masayoshi <maki@...>
高橋征義です。お花見のご案内です。
1 message
2004/03/29
[#39453] Re: int/int in Ruby2? — Masaaki Sakano <mas@...>
坂野 正明です。
36 messages
2004/03/31
[#39455] Re: int/int in Ruby2?
— NISHIMATSU Takeshi <t-nissie@...>
2004/03/31
西松と申します.
[#39470] Re: int/int in Ruby2?
— Masaaki Sakano <mas@...>
2004/04/01
坂野 正明です。
[#39473] Re: int/int in Ruby2?
— matz@... (Yukihiro Matsumoto)
2004/04/01
まつもと ゆきひろです
[#39484] Re: int/int in Ruby2?
— Masaaki Sakano <mas@...>
2004/04/03
坂野 正明です。
[#39514] Re: int/int in Ruby2?
— OOTANI TAKASHI <otn@...5.so-net.ne.jp>
2004/04/08
大谷と申します。
[#39528] Re: int/int in Ruby2?
— "T Akutsu" <locrian@...>
2004/04/09
あくつです。なんかわくわくしてきだぞ。(^^;)
[#39529] Re: int/int in Ruby2?
— 小西 弘将 <konishih@...6.so-net.ne.jp>
2004/04/09
小西 弘将です。
[ruby-list:39416] Re: rubyの関数定義について
From:
Makoto Kuwata <kwa@...>
Date:
2004-03-21 19:57:57 UTC
List:
ruby-list #39416
桑田といいます。
ストレスを感じる原因のひとつは、Rubyにおける関数定義の仕組みがわからない
ことではないかと思います。
---
Rubyや他のスクリプト言語は、インタプリタといえど内部でいったんコンパイル
してから実行されます。
Step1. プログラムを構文解析し、抽象構文木(やバイトコード)にコンパイルする。
Step2. 抽象構文木(やバイトコード)を解釈して実行する。
ここで関数定義があった場合、Perlや他の言語では Step1 の段階で関数が定義
されます。そのため、うしろのほうに関数定義があっても Step2 は問題なく
実行できます。
しかしRubyの場合は Step2 にならないと関数が定義されません。
そのため、プログラムのうしろのほうに関数定義を置くことができません。
例えば次のようなプログラムがあるとします。
if false then # 必ず偽
def func1()
return 0
end
end
Perlなどでは、このプログラムが構文解析された段階で必ず func1() が定義
されます(構文エラーでなければ)。
しかしRubyの場合は、この例だと関数定義文が実行されませんので、関数が
定義されません。
このような仕組みのため、Rubyでは関数を使うよりまえに関数定義が文として
実行されてないといけない、つまりうしろのほうに関数定義を置くことができない
というわけです。
同じ理由で、クラス定義もうしろのほうに置くことはできません。
#たぶんこの説明であってると思いますが、間違っていたらご指摘ください>皆様
このような仕組みに違和感を感じるかもしれませんが、条件に応じて実行時に
関数定義を変えることができるなど、大変強力な仕組みでもあります。
関数を先に定義しなければならなという制限は、その強力さとのトレードオフだと
ご理解ください。
まあCなどに慣れた方なら、メインの処理を先にもってきたいという気持ちは
よくわかります。
ただ逆にいえば、Rubyでメイン処理を見つけようと思ったらまず後ろのほうを
みればいいだけ、ともいえます。
特に if __FILE__ == $0 があればメイン処理の場所が一発でわかりますし、
慣れれば実はどうってことない問題だと思います(自分がそうでした)。
あと、Cのような手続き型言語では処理を順番に追っていくことが大事ですが、
Rubyのようなオブジェクト指向言語ではメッセージパッシングというか
オブジェクトの相関関係が大事になります。そのため、処理の順序というのは
(メソッドの中を除くと)あまり重要視されないんじゃないでしょうか。
いや重要視されないわけじゃないんですが、それよりも重要視しなきゃいけない
ことが他にあるということで。
他人のソースを読むときも、「処理がどこから始まっているか?」を気にする
よりも、「どんなオブジェクトやクラスがあって、それらがどう関係している
のか?」を気にするほうがよいと思いますがいかがでしょうか。
つまり、発想を手続き型からオブジェクト指向へと変えるわけです。
プログラムの中に関数がたくさんあれば、それは発想が手続き型のままで
ある証拠かもしれません。
どうしてもメイン処理をはじめに持ってきたければ、他のみなさんが示された
方法がよいと思います。
以上
--
kuwata