Ruby(変数)

Perlの変数(スカラー)は頭に$がついてました。Rubyの変数も同じように$をつけることができます。Perlでは$はスカラー変数を表していましたが、Rubyではグローバル変数を表します。ローカル変数の場合は、$をつけません。

takk@deb9:~$ irb
irb(main):001:0> $a="GLOBAL"
=> "GLOBAL"
irb(main):002:0> b="local"
=> "local"
irb(main):003:0> def aaa()
irb(main):004:1>  puts $a
irb(main):005:1>  puts b
irb(main):006:1> end
=> :aaa
irb(main):007:0> aaa
GLOBAL
NameError: undefined local variable or method `b' for main:Object
        from (irb):5:in `aaa'
        from (irb):7
        from /usr/bin/irb:11:in `<main>'
irb(main):008:0>

このように、$aはグローバル変数なので、aaaの中で参照できますが、bは、ローカル変数のため、aaa内から参照できません。
コマンドラインで使う分には、ほとんどローカル変数で事足りますので、$をつけないことになります。$がないと変数名が短くなるわけですので特な気がしますが、Perlでやっていたこんな表現ができなくなります。

takk@deb9:~$ perl -e '$a="HELLO"; print "$a $a\n"'
HELLO HELLO
takk@deb9:~$

Rubyで同じことをすると、当然なんですが文字列がそのまま表示されます。

takk@deb9:~$ ruby -e 'a="HELLO"; print "a a\n"'
a a
takk@deb9:~$

変数の中身を表示するには、こう書くことになります。

takk@deb9:~$ ruby -e 'a="HELLO"; puts a+" "+a'
HELLO HELLO
takk@deb9:~$

Rubyの変数は、インスタンス、クラス変数がありますが、コマンドラインで使う予定がないので覚えてません。Rubyはオブジェクト指向ですので、変数もオブジェクトです。

takk@deb9:~$ irb
irb(main):001:0> a="123"
=> "123"
irb(main):002:0>

今、文字列”123″をaに格納しました。aに1を足してみます。

irb(main):002:0> a + 1
TypeError: no implicit conversion of Fixnum into String
        from (irb):2:in `+'
        from (irb):2
        from /usr/bin/irb:11:in `<main>'
irb(main):003:0>

エラーになりました。文字列に数値の1を足したので当然ですね。Perlの方が特殊なのかもしれません。
aを数値として解釈するには、数値に変換するメソッドを使えばよいです。

irb(main):003:0> a.to_i + 1
=> 124
irb(main):004:0>

頼もしいですね。オブジェクトなので、メソッドを使えば何でもできる気がしますね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA