メソッドに引数を渡し演算の結果を返り値として受け取る
引数がよく分からない
「Mr.Yuki」と出力したいのですが…
1 def rename(name)
2 name = "Mr.#{name}"
3 end
4
5 name = "Yuki"
6 rename(name)
7 puts name
Yuki
この構文では、出力にMr.はつかない「Yuki」になります。
1 def rname(name) # renameメソッドで受け取る変数name 2 name ="Mr.#{name}" # renameメソッドで受け取る変数name 3 end
メソッドの変数には引数で渡した値のコピーが代入されている。
5 name = "Yuki" #このnameは全て引数のname 6 rename(name) 7 puts name
要するに、引数のnameと変数nameは同じ名前だが別物である
順番を追って解説。
- 5行目:引数
name
に文字列 "Yuki"が代入される - 6行目:この
name
を引数として、メソッドrenameを呼び出す この時にname
のなかに入っている値がコピーされる - 1行目:コピーされた"Yuki"はメソッドrenameの変数
name
に代入される。 よって引数name
とメソッドで使われる変数name
が同じ値となり、メソッドに値を渡すことができる - 2行目:ただし、変数
name
の値を変えても、引数のname
は別物なので、引数name
には影響がない
ではどうすれば期待通りの結果が得られるのか?
詳しく解説。
1 def rename(name) 2 name = "Mr.#{name}" 3 end
- 2行目:メソッド
rename
では引数から受け取ったname
にMr.をつけた文字列を返り値としてメソッドの呼び出し元に返す。6 name = rename(name)
- 修正前は
rename(name)
と、単にメソッドrename
を呼び出しただけだったが、今回はname = rename(name)
とメソッドからの返り値をname
に代入している
1 def rename(name)
2 name = "Mr.#{name}" # ③5行目の結果を受けて、"Mr.Yuki"が左辺の`name`に代入される
3 end
4
5 name = "Yuki" # ①「=」が1つの式は右辺から読む。”Yuki"を変数nameに代入
6 name = rename(name) # ②renameは1行目のメソッド。このメソッドの答えと、引数(name)(※5行目で定義)の値を左辺の変数nameに代入
7 puts name # ④putsで返り値を出力される
Mr.Yuki
これでname
の値が、メソッドrename
によってMr.をつけた文字列になる。
さいごに
ここは本当にわかりづらい。
nameがたくさん出てくる。それが別物だと頭で理解できなかった。
処理に番号ふって、順番で示したらいくらか入ってきた。
ここは復習が必要そうです。
Author And Source
この問題について(メソッドに引数を渡し演算の結果を返り値として受け取る), 我々は、より多くの情報をここで見つけました https://qiita.com/yuki_bizz/items/98c2fc9e838258ddc539著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .