no-image

思考停止 self変数がどうしてもわからない

rubyのself変数とは

たのしいruby 第5版の教本通りに進めていたが、self変数で壁にぶち当たってしまった。5時間くらい考えていたが、全く理解できない。

selfはレシーバーを参照している ⇒ だからなんだ

レシーバーを省略してメソッドを呼ぶと暗黙的にselfをレシーバーとします。そのため、実際は次のようにselfを省略してもnameメソッドが呼ばれることになります。

お前は何を言っているんだ

テラテイルで質問しても同じような答えがかえってきそうだから質問しない。とりあえずネットの海を探索するしかない答えがわかったら更新。ここから続きひとつだけわかったこと

レシーバーを省略してメソッドを呼ぶと暗黙的にselfをレシーバーとします。

これを何の言葉の意味も考えずに書くとこうなります。

【 name 】と書いても【 self.name 】になります。

オブジェクト.メソッド はオブジェクトがレシーバーになりますよね?だからnameと書いてもself.nameと同じことですよってことです。

name= メソッドはselfを省略できない?

ずっと考えてもわからなかったので、もうあきらめることにした。

【 name= 】 メソッドの場合は  【 name = “” 】 と書いてしまうとただの ローカル変数 になってしまうらしい。

だから self.name = “” と 書かないといけないらしい。この部分がまったく理解できなかった。この self.name= はどういう状況で使うのかが分からなければ理解できたことにならない。残念ながらネットにも例がのっていない。

とりあえずself変数はメソッドのレシーバーを参照する。これさえわかっていればいいのではなかろうかと思う。これはなにかセッターの話みたいなのだが、こんなもの使うこともないだろう。(わたくし底辺初心者です)