変数にはオブジェクトへの参照が格納される
Rubyの変数にはすべて何らかのオブジェクトへの参照が格納されます。
オブジェクトそのものが格納されることはありません。
sample.rb
str1 = "This is a string."
str2 = str1
p str1.equal? str2 # 参照先は同じ
str2[-1] = '?' # だから出力内容も同じ
p str1
p str2
var1 = 128
var2 = var1
p var2.equal? var1 # この時点では参照先が同じ
var2 *= 2 # こうすると
p var2.equal? var1 # var2には新しいオブジェクトが代入されたようだ
p var1
p var2
出力例
$ ruby sample.rb
true
"This is a string?"
"This is a string?"
true
false
128
256
関数への引数で注意
C/C++などで関数に配列 (ポインタ相当) を渡すときに内部で書き換えるかどうか意識するように、
Rubyでは参照渡ししかないため (特に文字列の場合に) 注意が必要です。
sample.rb
def add_postfix (str)
str << " ...???"
end
str = "This is a string."
add_postfix(str)
p str
出力例
$ ruby sample.rb
"This is a string. ...???"
様々な変数
C/C++などでは、グローバル変数やローカル変数、定数を宣言位置やconst修飾子などで区別しています。
Rubyではそうではなく、変数名で区別しています。
ローカル変数
myvar など小文字またはアンダーバーから開始
グローバル変数
$stdout, $var など$から開始
メンバ変数 (インスタンス変数)
@var など@から開始
staticメンバ変数 (クラス変数)
@@var など@@から開始
定数
MAXN など大文字から開始
0
Rubyを使った効率的なスクリプトの書き方を紹介
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。



