前のページ 次のページ 目次

4. 構文

4.1 :exit等の:のついた識別子は何ですか

シンボルと呼ばれる,識別子と1対1対応する整数(Fixnum)です. "exit".internとしても求められます.catch, throw, autoloadなどでは, 引数として文字列もシンボルも使えます.

method_missing,method_added,singleton_method_addedはシンボルを 要求します.

4.2 シンボルと同名の変数の値を取り出すにはどうすればいいですか

symbolのスコープでeval((:symbol).id2name)とすると, 値が取り出せます.
a = 'This is the content of "a"'
b = eval(:a.id2name)
a.id == b.id

4.3 loopは制御構造ですか

メソッドです.ブロックは新しいローカル変数のスコープを導入します.

4.4 a +bがエラーになりますが

a(+b)と解析されています.+の両側の空白をなくすか,いれるか のどちらかにしてください.

4.5 s = "x"; puts s *10 がエラーになりますが

puts s *10 のところが,s(*10)というメソッド呼出しと解析されて しまいます.s*10にするか,s * 10にしてください.

4.6 p {}で何も表示されません

{}がハッシュのコンストラクタではなく,ブロックと解析されています. p({})としてください.

4.7 def pos= (val) print @pos,"\n"; @pos = val endと定義しても, pos = 1で参照できません

=のついたメソッドは,レシーバー形式で呼ぶ必要があります. self.pos = 1 という形で呼んでください.

4.8 '\1''\\1'はどう違いますか

同じです.シングルクォートの中では,\'\\だけが 解釈され,それ以外は解釈されません.

4.9 p true or true and falsetrueを表示するのに, a=true if true or true and falseでは,atrue が代入されません.

最初の式は,(p true) or true and falseと解釈されます. and/orは 文の構成要素として解釈され,pの引数を結ぶ演算子としては解釈され ません.

2番目のは,a=true if (true or true and false)と解釈されています. ifの方がand/orより優先順位が低いこと, orandの優先順位が同じなので, 左から順に解釈されることによります.

4.10 p(nil || "")は""を返し,p(nil or "")はparse errorになります.

||は,引数を結ぶ演算子として用いることができます.orは文と文を結ぶこと しかできず,引数を結ぶことができません.p nil or ""とp((nil or ""))を 試してください.
前のページ 次のページ 目次