Rubyに++がない理由
今日の衝撃経由、ruby-list:5323にて。
「(Rubyに++がないのは)++の動作が本質的に「変数を操作する」ものであるため」とのこと。
なるほど。
- 変数はオブジェクトではない
- ++は += 1 すなわち「代入操作」である
- 代入操作はオブジェクトに対する操作ではなく、変数に対する操作である
と理解しました。ということは「代入する」というメソッドはあり得ないのですね。
class Rubyco def =(x) end end Rubyco.new = 12345
実行すると...
a.rb:2: parse error, unexpected '=' def =(x) ^ a.rb:6: parse error, unexpected $, expecting kEND
ふむふむ。
ただし、配列の要素への代入はメソッドになりますね。これはいわばインスタンス変数への代入のようなものですからね。
class Rubyco def []=(i, x) puts "Assign '#{x}' to the #{i}th element." end end Rubyco.new[5] = "Milla Jovovich"
実行結果です♪
Assign 'Milla Jovovich' to the 5th element.
追記(課題):代入をメソッドにすると変だな、というのがよくわかるパターンは、
self = 123
という式(文)だと思います。これをもし、
self.assign(123)
あるいは、
self.value = 123
だと解釈したらどうなるだろう、というのは考える価値のある問題…かしらん。