質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

3回答

1043閲覧

Ruby attr_writer セッターメソッド name=(arg)の記述についてどういう意味なのか。 / attr_accessorに関して

nyako

総合スコア45

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/01/12 13:20

rb

1class Human 2 3 def name=(arg) # セッター 4 @name = arg 5 end 6 7 def name # ゲッター 8 @name 9 end 10 11end 12 13taro = Human.new 14taro.name = "山田太郎" 15taro.name 16

attr_accessorメソッドに関して学習している際に異なるインスタンスからでもインスタンス変数にアクセスをし
値を取得するゲッター(attr_reader)
値を再セットする(attr_writer)

2つに分かれていることを理解しました。

上記コードセッターの

rb

1name=(arg)

この書き方の意味が調べてもなかなかわかりません。

  • メソッド名の末尾に=(イコール)をつけると、代入式のようにメソッドを呼び出すことが出来ます。

と見ましたがどういうことが行われているのか頭で流れが掴めません。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

質問欄の def name=(arg) を見ると name= が赤くなってますね。
つまり、 name= というメソッドなのです。

ruby

1def name?(arg) 2 @name = arg 3end

としたら、name? がセッターになります。ブーイングの嵐ですが。

メソッド名に使える文字なら何を使ってもセッターに出来ますが、=だけ特別扱いで、= の前に空白が有っても良くなってます。
name = 5 はOK name ? 5 はNG
これはプログラムを読みやすくするためのものでしょう。name?(5)でなく name? 5 の様に( )無しでもよいよ、としているような。

投稿2021/01/12 23:09

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単なる名前です。

Ruby

1class Human 2 def name=(arg) 3 @name = arg 4 end 5end 6・・・・ 7・・・・ 8x = Human.new 9x.name= "taro" 10```と、 11```Ruby 12class Human 13 def set_name(arg) 14 @name = arg 15 end 16end 17・・・・ 18・・・・ 19x = Human.new 20x.set_name "taro"

は、全く同じ構造。違うのは、呼び出しの時に=の前に空白を置いても良いことだけ。

名前に=が使えるのは、メソッド名の末尾だけです。

投稿2021/01/12 14:14

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どういうことが行われているのか頭で流れが掴めません。

理解するのではなく、foo.bar = 5のようなプロパティ代入は、foo.bar=(5)のようなメソッド呼び出しとして解釈されるというルールです。

Ruby利用者にとっては議論や改良の余地がある話ではなく、覚えて受け入れるよりありません。

投稿2021/01/12 13:50

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問