404 Blog Not Found:perl - 万能なnewの書き方
しかし、デフォルト値を持たせたければどうすればよいか、こうすればよい。
bless { %default, @_ }, $class;
これでなんでうまくいくのかよくわからなかったのでperlshでいろいろ動かしてみた。
main[61]$ %a = (name => 'anon', pet => 'none') name anon pet none main[62]$ %b = (name => 'kzfm', pet => 'hana') name kzfm pet hana main[63]$ %c = (name => 'yuki') name yuki main[64]$ $d = bless {%a,%b} main=HASH(0xa123ce8) main[65]$ print Dumper($d) $VAR1 = bless( { 'pet' => 'hana', 'name' => 'kzfm' }, 'main' ); 1 main[66]$ $g = bless {%a,%c} main=HASH(0xa123e94) main[67]$ print Dumper($g) $VAR1 = bless( { 'pet' => 'none', 'name' => 'yuki' }, 'main' ); 1
別にblessせんでも
main[77]$ $d = {%a,%b} HASH(0xa123ce8) main[78]$ print Dumper($d) $VAR1 = { 'pet' => 'hana', 'name' => 'kzfm' }; 1 main[79]$ $g = {%a,%c} HASH(0xa123d24) main[80]$ print Dumper($g) $VAR1 = { 'pet' => 'none', 'name' => 'yuki' }; 1
うーん、思った通りに動いている。というわけで、一度アレイにしてみる。
main[88]$ $d = [%a,%b] ARRAY(0xa123fd8) main[89]$ print Dumper($d) $VAR1 = [ 'pet', 'none', 'name', 'anon', 'pet', 'hana', 'name', 'kzfm' ]; 1
ちゃんとアレイができているので、これをハッシュのリファレンスにしてみる。
main[90]$ $x = {@{$d}} HASH(0xa124080) main[91]$ print Dumper($x) $VAR1 = { 'pet' => 'hana', 'name' => 'kzfm' }; 1
おー、思ったとおり。
アレイからハッシュにするときにインデックス値の小さい順に評価されていって、同じキー値を持つものは上書きされていくのか。