14. ruby - 基本的な文法 - 引数

 
14.1 概要
14.2 おバカな結論

14.1 概要

 関数(メソッド)に渡す引数が、値渡しなのかアドレス渡しなのか、はたまた参照渡しなのかというのは大問題なのです。  参照渡しというのが FORTRAN や C言語で育ったわたしには実はピンと来ていないので、これも大変なのです。  検索して上位に来たものを片っ端から読んでみますか。(2018年6月1日現在)  でまぁ、それ風な「Ruby の破壊的メソッドと参照の値渡し」というのを読ませていただいたのですが。  ごめんなさい。おバカなせいか、さっぱりわからないのです。  「高知で働くひとのブログ - Rubyでの参照渡し」の方がわかりやすそうですが、これもピンとこない。  「値渡しと参照渡しの違いを理解する」  ごめんなさい、これも、理解できない。

14.2 おバカな結論

 でまぁ、わたしが現時点(2018年6月1日)にたどりついた結論。  スカラ変数的なものを引数で渡せば、呼出し先で値を変更しても、呼び出し側の値は変わらない。  配列的なものを引数で渡せば、呼出し先で変更した値は、呼び出し側へ影響する。  てなことなのです。  ruby の変数はすべてオブジェクトらしいのでスカラ変数というものがあるかどうか知らないですが・・・。  わたしのおバカな理解でもじゅうぶんわたしの思う通りには動いてくれそうです。  すなわち

#!/usr/bin/env ruby

def method(c, d)
  c = 5
  d[1] = 6
end

a = 1
b = [ 2, 3, 4]

puts "a = #{a}"
puts "b = #{b}"

method(a, b)

puts "a = #{a}"
puts "b = #{b}"
 というソースを書いて実行すると

> ./ソースファイル名.rb
a = 1
b = [2, 3, 4]
a = 1
b = [2, 6, 4]
 予定通りに動いてくれました。