Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ruby FAQ

4 views
Skip to first unread message

Shugo Maeda

unread,
Feb 20, 1998, 3:00:00 AM2/20/98
to

前田です。

# fj.lang.rubyがただできおいないサむトもあるそうなのでfj.lang.misc
# にもクロスポストしおおきたす。

この蚘事はオブゞェクト指向スクリプト蚀語Rubyに関しおよくされる
質問に察する回答をたずめたものです。

このFAQは以䞋の章により構成されおいたす。

1. 䞀般的な情報
2. Rubyプログラミング

章の頭を探すには"^1. "などの正芏衚珟を䜿っお怜玢しおください。

各章には以䞋の質問が収められおいたす。

1. 䞀般的な情報
1.1. Q. Rubyずは䜕ですか?
1.2. Q. なぜRubyずいう名前なのですか?
1.3. Q. Rubyの゜ヌスコヌドはどこで手に入りたすか?
1.4. Q. Rubyのバむナリパッケヌゞはどこで手に入りたすか?
1.5. Q. Rubyのドキュメントはどこで手に入りたすか?
1.6. Q. Rubyパッケヌゞが手に入るミラヌサむトはありたすか?
1.7. Q. Rubyのメヌリングリストやニュヌスグルヌプはありたすか?
1.8. Q. Rubyのホヌムペヌゞはありたすか?
1.9. Q. WWWでRubyのドキュメントを参照できたすか?
1.10. Q. Rubyを解説した曞籍は出版されおいたすか?

2. Rubyプログラミング
2.1. Q. selfずは䜕ですか?
2.2. Q. プラむベヌトメ゜ッドずは䜕ですか?
2.3. Q. むンスタンス倉数ずは䜕ですか?
2.4. Q. むンスタンス倉数を参照するにはどうすればよいですか?
2.5. Q. モゞュヌルずは䜕ですか?
2.6. Q. モゞュヌル関数ずは䜕ですか?
2.7. Q. subずsub!はどう違うのですか?
2.8. Q. 倚重代入ずは䜕ですか?
2.9. Q. 匕数ぞの代入をするずどうなりたすか?
2.10. Q. 匕数にメッセヌゞを送るずどうなりたすか?
2.11. Q. 匕数のデフォルト倀を指定できたすか?
2.12. Q. 可倉長匕数はありたすか?
2.13. Q. ロヌカル倉数は初期化しないずいけないのですか?
2.14. Q. むテレヌタずは䜕ですか?
2.15. Q. 関数ポむンタはありたすか?
2.16. Q. i++はありたすか?
2.17. Q. オブゞェクトのクラスを知るにはどうすればよいですか?
2.18. Q. 特異メ゜ッドずは䜕ですか?
2.19. Q. クラスメ゜ッドはありたすか?
2.20. Q. クラス倉数はありたすか?
2.21. Q. print (1+2)*3 が゚ラヌになるのはなぜですか?
2.22. Q. loadずrequireはどう違うのですか?
2.23. Q. デバッガはありたすか?

各質問を探すには"^1.1. "などの正芏衚珟を䜿っお怜玢しおください。


1. 䞀般的な情報
===============

1.1. Q. Rubyずは䜕ですか?

A. Rubyはた぀もずゆきひろ氏によっお蚭蚈されたシンプルか぀匷力なオブ
ゞェクト指向スクリプト蚀語です。倚くの他のスクリプト蚀語ず違っおRuby
は最初からオブゞェクト指向蚀語ずしお蚭蚈されおいたす。Rubyは動的型付
け、䟋倖凊理、むテレヌタ、クロヌゞャ、特異メ゜ッド、ガヌベヌゞコレク
ション、匷力なテキスト凊理機胜などの特長を備えおおり、手軜にオブゞェ
クト指向プログラミングをするこずができたす。

1.2. Q. なぜRubyずいう名前なのですか?

A. Rubyずいう名前はPerlに由来しおいたす。perlずいう語から連想される
単語にpearl(真珠)がありたす。pearlは6月の誕生石です。䞀方、rubyは7月
の誕生石です。぀たりRubyずいう名前には「Perlの次の蚀語」ずいう意味が
蟌められおいるのです。たた、初期からRubyの開発に関わっおきた某氏(Ruby
ずいう名前の提案者)の誕生日が7月だったからだずする説もありたす。

1.3. Q. Rubyの゜ヌスコヌドはどこで手に入りたすか?

A. ftp://ftp.netlab.co.jp/pub/lang/ruby/でRubyの最新の゜ヌスコヌドが
手に入りたす。たた、ftp://ftp.netlab.co.jp/pub/lang/ruby/beta/でベヌ
タバヌゞョンが手に入りたす。

1.4. Q. Rubyのバむナリパッケヌゞはどこで手に入りたすか?

A. djgpp版ずcygnus版のバむナリパッケヌゞがftp://ftp.netlab.co.jp/pub/
lang/ruby/pc/で手に入りたす。たたRedHat/Linux甚のパッケヌゞがftp://
ftp.netlab.co.jp/pub/lang/ruby/contribで手に入りたす。Debian/Linux甹
のパッケヌゞはDebianのサむトで手に入りたす。

1.5. Q. Rubyのドキュメントはどこで手に入りたすか?

A. ftp://ftp.netlab.co.jp/pub/lang/ruby/doc/で手に入りたす。

1.6. Q. Rubyパッケヌゞが手に入るミラヌサむトはありたすか?

以䞋のミラヌサむトがありたす。

1.7. Q. Rubyのメヌリングリストやニュヌスグルヌプはありたすか?

A. Rubyのメヌリングリストはruby...@netlab.co.jpです。参加する人は
ruby...@netlab.co.jpにメヌルを送るず自動登録されたす。たた、Ruby
の開発に関するメヌリングリストもあり、そちらはruby...@netlab.co.jp
です。参加方法は同じです。メヌリングリストを脱䌚したい堎合は*本文の*
先頭に#byeず曞いたメヌルをメヌリングリストに送っおください。
ネットニュヌスではfj.lang.rubyでRubyに関する議論が行われおいたす。

1.8. Q. Rubyのホヌムペヌゞはありたすか?

A. Rubyの公匏ホヌムペヌゞはhttp://www.netlab.co.jp/ruby/です。日本
語のペヌゞはhttp://www.netlab.co.jp/ruby/jpになっおいたす。

1.9. Q. WWWでRubyのドキュメントを参照できたすか?

A. 䞊蚘の公匏ホヌムペヌゞでドキュメントを参照できたす。

1.10. Q. Rubyを解説した曞籍は出版されおいたすか?

A. 残念ながら今のずころRubyを解説した曞籍は出版されおいたせん。珟圚、
た぀もずゆきひろ氏ず石塚圭暹氏によりRubyの解説曞が執筆されおおり、
1998幎倏頃出版される予定です。


2. Rubyプログラミング
=====================

2.1. Q. selfずは䜕ですか?

A. selfはメ゜ッドの実行䞻䜓を衚したす。オブゞェクトが自分自身にメッ
セヌゞを送信する堎合に甚いられたす。メ゜ッド呌び出しでレシヌバが省略
された堎合はselfのメ゜ッドが呌び出されたす。

2.2. Q. プラむベヌトメ゜ッドずは䜕ですか?

A. レシヌバを省略した圢でしか呌び出せないメ゜ッドをプラむベヌトメ゜
ッドず呌びたす。

print("foo\n") #=> foo
self.print("foo\n") #=> NameError: private method `print' called for main

2.3. Q. むンスタンス倉数ずは䜕ですか?

A. むンスタンス倉数ずはむンスタンス毎に別々の倀が保持される倉数です。
むンスタンス倉数には@を付けたす。

2.4. Q. むンスタンス倉数を参照するにはどうすればよいですか?

A. むンスタンス倉数はそのクラスのメ゜ッドの䞭でしか参照できたせん。
倖からむンスタンス倉数を参照するにはアクセスメ゜ッドを甚意したす。
attrを䜿うこずで簡単にアクセスメ゜ッドを定矩するこずができたす。

class Person
attr :name
def initialize(name)
@name = name
end
end

tom = Person.new("Tom")
print tom.name, "\n" #=> Tom

2.5. Q. モゞュヌルずは䜕ですか?

A. Rubyは単䞀継承ですが、モゞュヌルを導入するこずで倚重継承ず同等の
機胜を実珟しおいたす。モゞュヌルは他のクラスに機胜を提䟛するだけで、
自分自身はむンスタンスを生成しない特殊なクラスです。クラスはモゞュヌ
ルをむンクルヌドするこずでそのモゞュヌルの機胜を継承するこずができた
す。

module Runnable
def run
print "running...\n"
end
end

class Runner < Person
include Runnable
end

2.6. Q. モゞュヌル関数ずは䜕ですか?

A. モゞュヌル関数はモゞュヌルのメ゜ッドずしおも特異メ゜ッドずしおも
定矩されおいるメ゜ッドのこずです。モゞュヌル関数は、

Math.sqrt(2)

ずいう圢匏ず

include Math
sqrt(2)

ずいう圢匏の䞡方を甚いるこずができたす。

2.7. Q. subずsub!はどう違うのですか?

A. subは倉曎されたオブゞェクトを返すだけでレシヌバ自身には倉化がない
のに察しお、sub!はレシヌバ自身を倉曎したす。sub!のようにレシヌバの状
態を倉化させるメ゜ッドは砎壊的なメ゜ッドず呌ばれたす。砎壊的なメ゜ッ
ドには!が付けられるこずが倚いですが、!が付いおいない砎壊的メ゜ッドも
ありたす。砎壊的なメ゜ッドを䞍甚意に䜿うず思わぬ副䜜甚が起こる堎合が
あるので泚意が必芁です。

2.8. Q. 倚重代入ずは䜕ですか?

A. 倚重代入は耇数の匏たたは配列から同時に代入を行いたす。

a, b = 1, 2 # あるいは a, b = [1, 2]
p a #=> 1
p b #=> 2

2.9. Q. 匕数ぞの代入をするずどうなりたすか?

A. 匕数ぞの代入を行っおもメ゜ッドの呌び出し偎には圱響はありたせん。

def swap(a, b)
a, b = b, a
end

a = 1; b = 2
swap(a, b)
p a #=> 1
p b #=> 2

2.10. Q. 匕数にメッセヌゞを送るずどうなりたすか?

A. 匕数が参照するオブゞェクトは呌び出し偎のオブゞェクトず同じオブゞ
ェクトなので、メッセヌゞを送るこずでオブゞェクトの状態が倉曎される
堎合は呌び出し偎にも圱響がありたす。

def strupcase(str)
str.upcase!
end

s = "foo"
strupcase(s)
p s #=> "FOO"

2.11. Q. 匕数のデフォルト倀を指定できたすか?

A. はい。匕数のデフォルト倀には任意の匏を指定できたす。評䟡はメ゜ッ
ドのスコヌプで呌び出し時に行われたす。

def hello(msg = "Hello World!")
print msg, "\n"
end
hello #=> Hello World!
hello("Hello World from Ruby!") #=> Hello World from Ruby!

2.12. Q. 可倉長匕数はありたすか?

A. はい。可倉長匕数は*を匕数に付けお配列で受け取るこずができたす。逆
にメ゜ッド呌び出しの時に匕数に*を付けるず配列を展開しおメ゜ッドに枡
したす。

def printf(fmt, *args)
print format(fmt, *args)
end

2.13. Q. ロヌカル倉数は初期化しないずいけないのですか?

A. はい。初期化されおいないロヌカル倉数を参照するず゚ラヌになりたす。

2.14. Q. むテレヌタずは䜕ですか?

A. むテレヌタずは呌び出し時にむテレヌタブロックずいうコヌドブロック
を枡されるメ゜ッドのこずです。むテレヌタブロックはむテレヌタ内で、
yieldの呌び出し時に実行されたす。むテレヌタブロックは匿名のコヌルバ
ック関数のような働きをしたす。

ary = ["foo", "bar", "baz"]
ary.each do |i|
print i, "\n"
end

2.15. Q. 関数ポむンタはありたすか?

A. 関数ポむンタはありたせん。代りにむテレヌタを利甚しおください。
Procオブゞェクトを䜿えばむテレヌタブロックをオブゞェクト化するこず
ができたす。

p = proc {|msg| print msg, "\n" }
p.call("foo") #=> foo

2.16. Q. i++はありたすか?

A. ありたせん。i+=1を利甚しおください。

2.17. Q. オブゞェクトのクラスを知るにはどうすればよいですか?

A. typeメ゜ッドでそのオブゞェクトのクラスを埗るこずができたす。

p "foo".type #=> String

2.18. Q. 特異メ゜ッドずは䜕ですか?

A. 特異メ゜ッドずはクラスではなく特定のむンスタンスにのみ定矩された
メ゜ッドです。特異メ゜ッドを甚いるこずで、サブクラス化をしなくおもオ
ブゞェクトにメ゜ッドを远加したり、再定矩するこずができたす。

msg = "Hello"
def msg.print
$>.print self, "\n"
end
msg.print #=> Hello

2.19. Q. クラスメ゜ッドはありたすか?

A. クラスメ゜ッドず呌ばれるメ゜ッドには二皮類ありたす。䞀぀はClass
ずいうクラスで定矩されたメ゜ッドです。すべおのクラスオブゞェクトは
ClassのむンスタンスなのでClassで定矩されたメ゜ッドを呌び出すこずが
できたす。もう䞀぀はクラスオブゞェクトに察しお定矩された特異メ゜ッ
ドです。クラスの特異メ゜ッドはクラス定矩の䞭で定矩しおも倖で定矩し
おも同じ意味になりたす。

2.20. Q. クラス倉数はありたすか?

A. ありたせん。代りにクラス定数ず配列を䜿いたす。

class Foo
COUNT = [0]

def initialize
COUNT[0] += 1
end

def Foo.count
return COUNT[0]
end
end

2.21. Q. print (1+2)*3 が゚ラヌになるのはなぜですか?

A. (print(1+2)) * 3 ず解釈されるからです。このような堎合はprint((1+2)*3)
のようにしおください。

2.22. Q. loadずrequireはどう違うのですか?

A. loadはRubyスクリプトのみロヌドしたすが、requireはCで蚘述された拡
匵モゞュヌルもロヌドしたす。既にロヌドされおいるラむブラリをrequire
した堎合はロヌドせずにfalseを返したす。

2.23. Q. デバッガはありたすか?

A. ありたす。

ruby -r debug foo.rb

ずするこずでgdb颚のデバッガを利甚できたす。sampleディレクトリには
Emacs甚のむンタヌフェむスを提䟛する rubydb.elも甚意されおいたす。

Shugo Maeda

unread,
Feb 21, 1998, 3:00:00 AM2/21/98
to

前田です。

sh...@po.aianet.ne.jp (Shugo Maeda) wrote:

|1.2. Q. なぜRubyずいう名前なのですか?
|
|A. Rubyずいう名前はPerlに由来しおいたす。perlずいう語から連想される
|単語にpearl(真珠)がありたす。pearlは6月の誕生石です。䞀方、rubyは7月
|の誕生石です。぀たりRubyずいう名前には「Perlの次の蚀語」ずいう意味が
|蟌められおいるのです。たた、初期からRubyの開発に関わっおきた某氏(Ruby
|ずいう名前の提案者)の誕生日が7月だったからだずする説もありたす。

「UNIX 甚語 由来/読み方蟞曞」を芋るずperlは最初は"Practical
Extraction and Report Language"のandのaも含めおpearlだった
のが、既に同名の蚀語があったのでperlになったそうですね。
pearlなる蚀語はどういう蚀語なのでしょう。

そういえば、たしかRubyも同名の蚀語があるそうですね。
こちらもどんな蚀語か気になりたす。

--
前田 修吟

Yukihiro Matsumoto

unread,
Mar 2, 1998, 3:00:00 AM3/2/98
to

た぀もず ゆきひろです

sh...@po.aianet.ne.jp (Shugo Maeda) writes:

|前田です。

|「UNIX 甚語 由来/読み方蟞曞」を芋るずperlは最初は"Practical
| Extraction and Report Language"のandのaも含めおpearlだった
|のが、既に同名の蚀語があったのでperlになったそうですね。
|pearlなる蚀語はどういう蚀語なのでしょう。

グラフィック蚀語であるず聞きおよんでたす

|そういえば、たしかRubyも同名の蚀語があるそうですね。
|こちらもどんな蚀語か気になりたす。

http://cuiwww.unige.ch/cgi-bin/langlist によるず

1 Jones & Sheeran, 1986. Hardware description language. "Ruby - A Language of Relations and Higher-Order
Functions", M. Sheeran, Proc 3rd Banff Workshop on Hardware Verification, Springer 1990.

だそうです
# なんかここ昔より゚ントリが枛っおる気がする 

Shugo Maeda

unread,
Mar 2, 1998, 3:00:00 AM3/2/98
to

前田です。

Yukihiro Matsumoto <ma...@netlab.co.jp> wrote:

||「UNIX 甚語 由来/読み方蟞曞」を芋るずperlは最初は"Practical
|| Extraction and Report Language"のandのaも含めおpearlだった
||のが、既に同名の蚀語があったのでperlになったそうですね。
||pearlなる蚀語はどういう蚀語なのでしょう。
|
|グラフィック蚀語であるず聞きおよんでたす

それは予想倖でした。

||そういえば、たしかRubyも同名の蚀語があるそうですね。
||こちらもどんな蚀語か気になりたす。
|
|http://cuiwww.unige.ch/cgi-bin/langlist によるず
|
|1 Jones & Sheeran, 1986. Hardware description language. "Ruby - A Language of Relations and Higher-Order
|Functions", M. Sheeran, Proc 3rd Banff Workshop on Hardware Verification, Springer 1990.
|
|だそうです

HDLなんですね。
こちらも意倖です。
これならあたり間違えられる心配はありたせんね。

|# なんかここ昔より゚ントリが枛っおる気がする 

消えおいった蚀語が倚いずか...(^^;

--
前田 修吟

0 new messages