せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】リテラルって何?

 
シンボルって数字みたいという理解をしていたら師匠からメールが来た。

シンボルって分かりにくいけど
使う側からすると、定数に感じるかどうかかなぁと思ってる
具体的には
文字列との大きな違いは、ロジックによって組み立てれるかどうかやと思う。
Stringやと
s = "a"
s += "b"
puts s #-> ab

こんなことできるけど、シンボルやとできない
シンボルはロジックで組み立てるのではなく、
明示的にソースに記述されることになる
これが定数っぽく感じて、コードが見やすくなる
気がしている。

うまくいえてないね
まぁ、 s.intern でもシンボルがとれるから
印象の話でしかないが。

定数っていうか、リテラルって感じやね。

おおー。師匠でもうまく説明できないんだ。
それはひとえに携帯メールだから、って事はないよね。。

うーん。なるほど。

定数は分かるけど、リテラルって改めて聞かれると、
なんだか良く分からない。


 

定数っていうか、リテラルって感じ

そっかー。。「感じ」かー。
そうだよね。
そういう女子高生孤独のグルメぽい言い回しになるよね。

 

ベビースターの味って男の子だよな

 

リテラルって何

公式ガイドを見てみよう。
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fliteral.html


 

引数にヒアドキュメントを渡す。

ヒアドキュメントでは、開始ラベル `<<識別子' が文法要素としての式 にあたります。これは、開始ラベルを使ってヒアドキュメント全体を引数に渡 したりレシーバにしたりすることができるということを意味します。

http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fliteral.html

公式の例が良く分からなかった。こういうこと↓

def method (a1, a2, a3)
p a2
p a3
end


method("hh",<<LABEL, "jjj")
    doggg
LABEL

■実行結果

"    doggg\n"
"jjj"

ふーん。

 

引数にハッシュを渡す

メソッドの引数の末尾に要素が1つ以上のハッシュを渡す場合は、{, }を省略することができます。

def method (a1, a2, a3)
p a3
end
method(1,2,3=>4, 5=>6)

■実行結果

{3=>4, 5=>6}

へー。引数は3つと認識されるんだー。

やっぱりまだ分からない

公式ガイド「リテラル」を読んでTipsはたまったものの、
リテラルとはなにかが、まだまだもやもやしている。

例えば、ガイドには「ハッシュ式」「シンボル」って項目があるのだけれど、
なぜこれらが「リテラル」の項目にあるのか不明。

このあたりは、オライリー本が届いてから改めて考えてみよう。