クラスメソッドとself
クラスメソッドの定義ではselfが使えます。そのほうがクラス名を明記するよりもよいスタイルのようです。想像するに、クラス名をリファクタリングしたときの修正箇所が減るからではないでしょうか。
class Rubyco def self.hello print "Hello, Rubyco!\n" end end Rubyco.hello
- 参考:Rubyコーディング規約
Thread#joinでスレッド終了を待つ
1000回ずつ表示して終了します。メインスレッドが終わるとプログラムが終了してしまうので、Thread#joinで待つことにします。
t1 = Thread.start { 1000.times { print "1" } print Thread.current } t2 = Thread.start { 1000.times { print "2" } print Thread.current } t1.join t2.join
実行結果。
11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111122222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222221111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111112222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111122222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222221111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111112222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222222222222222222222222111111#<Threa d:0x2946e68>2222222#<Thread:0x29456c8>
Thread.startでスレッド起動
Thread.startで新しいスレッドを起動します。
Thread.start { while true print "1" end } while true print "2" end
実行結果は次のようになります。
1111111111111111111111111111111111111222222222 2222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222211 1111111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222 1111111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222 1111111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222 2222222222222222222222222222222222222222222222 2222111111111111111111111111111111111111111111 1111111111111111111111111111111111111111111111 1111111111122222222222222222222222222222222222 2222222222222222222222222222222222222222222222 2222222222222222211111111111111111111111111111
::で定数のスコープ
- で定数のスコープを明示的に表すサンプルです。
# スコープ Value = 1 class MyClass Value = 2 def method print ::Value, "\n" # => 1 print MyClass::Value, "\n" # => 2 print Value, "\n" # => 2 for x in 1..1 print Value, "\n" # => 2 end end end print "** out **\n"; print Value, "\n"; # => 1 print ::Value, "\n"; # => 1 print MyClass::Value, "\n"; # => 2 print "** in **\n"; a = MyClass.new; a.method
実行結果
** out ** 1 1 2 ** in ** 1 2 2 2
定数は大文字で
大文字で始まる識別子は定数になり、2回代入しようとすると警告が出ます。警告は出ますが、代入はできるようです。
MESSAGE = "Hello Ruby!\n" print MESSAGE MESSAGE = "Hello, again!\n" print MESSAGE
実行結果の抜粋。
Hello Ruby! warning: already initialized constant MESSAGE Hello, again!
足し算表
1+1から9+9までの足し算表をCSV形式で出力します。
for x in 1..9 for y in 1..9 print "\"#{x}+#{y}=#{x+y}\"," end print "\n" end
結果
"1+1=2","1+2=3","1+3=4","1+4=5","1+5=6","1+6=7","1+7=8","1+8=9","1+9=10", "2+1=3","2+2=4","2+3=5","2+4=6","2+5=7","2+6=8","2+7=9","2+8=10","2+9=11", "3+1=4","3+2=5","3+3=6","3+4=7","3+5=8","3+6=9","3+7=10","3+8=11","3+9=12", "4+1=5","4+2=6","4+3=7","4+4=8","4+5=9","4+6=10","4+7=11","4+8=12","4+9=13", "5+1=6","5+2=7","5+3=8","5+4=9","5+5=10","5+6=11","5+7=12","5+8=13","5+9=14", "6+1=7","6+2=8","6+3=9","6+4=10","6+5=11","6+6=12","6+7=13","6+8=14","6+9=15", "7+1=8","7+2=9","7+3=10","7+4=11","7+5=12","7+6=13","7+7=14","7+8=15","7+9=16", "8+1=9","8+2=10","8+3=11","8+4=12","8+5=13","8+6=14","8+7=15","8+8=16","8+9=17", "9+1=10","9+2=11","9+3=12","9+4=13","9+5=14","9+6=15","9+7=16","9+8=17","9+9=18",
$とグローバル変数
$message = "Hello, Ruby!\n"; print $message;
__END__の後で
Perlと同じ。
# コメント print "Hello, Ruby!\n"; __END__ ここには好きなことを書ける。