ruby学習メモ
コマンド展開
OSによりコマンドとしいて実行される。末尾に改行が付く
`echo aaa` => "aaa\n"
%x{ echo "aaa" } => "\"aaa\"\n"
def duration=(new_duration) puts "new duration = #{new_duration}" @duration = new_duration end end song = Song.new;song.duration = "hogehoge"
代入の返却値は破棄される。
class RetTest def hoge=(new_value) @value = new_value return 100 end end
下記の場合は value に 100 ではなく 20 が設定される
test = RetTest.new value = test.hoge = 20 value => 20
属性書き込みメソッドの場合はself が暗黙レシーバにならない
class BrokenAmplifier attr_accessor :left_channel, :right_channel def volume=(vol) left_channel = self.right_channel = vol end end
ba = BrokenAmplifier.new ba.left_channel = ba.right_channel = 99 ba.volume = 5 ba.left_channel => 99 ← 5 にならない ba.right_channel => 5
多重代入
代入される値が代入に影響を与えない
value = 1 value, value = 100,value => [100, 1] ← [100,100]にはならない value => 1
a = [1,2,3,4] b, c = a => [1, 2, 3, 4] b => 1 c => 2 b, *c = a => [1, 2, 3, 4] b => 1 c => [2, 3, 4] b, c = 99, a => [99, [1, 2, 3, 4]] b => 99 c => [1, 2, 3, 4] b, *c = 99, a => [99, [1, 2, 3, 4]] b => 99 c => [[1, 2, 3, 4]] b, c = 99, *a => [99, 1, 2, 3, 4] b => 99 c => 1 b, *c = 99, *a => [99, 1, 2, 3, 4] b => 99 c => [1, 2, 3, 4]
b,(c,d),e=1,2,3,4 => [1, 2, 3, 4] b => 1 c =>2 d=>nil e=>3 b,(c,d),e=[1,2,3,4] => [1, 2, 3, 4] b => 1 c=>2 d=>nil e=>3 b,(c,d),e=1,[2,3],4 => [1, [2, 3], 4] b=>1 c=>2 d=>3 e=>4 b,(c,d),e=1,[2,3,4],5 => [1, [2, 3, 4], 5] b=>1 c=>2 d=>3 e=>5 b,(c,*d),e=1,[2,3,4],5 => [1, [2, 3, 4], 5] b=>1 c=>2 d=>[3, 4] e=>5