2013-05-20 14 views
23

この演算子はHAMLコードで見ました。それが何のためにあるのだろうか。単項疑問符(?)演算子は何をしますか?

> ?{ 
=> "{" 
> ?\s 
=> " " 
> ?a 
=> "a" 

そして、これは動作しません:

私は、次の作品を見る

> ?ab 
SyntaxError: (irb):4: syntax error, unexpected '?' 

をだから私はそれが文字に引数を取り、その文字の文字列を返すこととします。

質問:

  1. このオペレータは何をしますか?
  2. いつ使用しますか?それは本当に唯一の1文字の文字列を作成する場合
  3. は、なぜそれが言語に含まれていましたか?それは言語の直交性を壊しませんか?そのメリットは何ですか?
+0

* Rubyの言語の直交性*本当に? –

+0

@muistooshortよく、少なくともすべてがクラスとメソッドです。それは収差があります(ほとんどがperlです)。 – fotanus

答えて

24

これは、単一の文字列を返します。これは、1文字の文字列リテラルを書き込むための最短の方法です。多くの単一文字列を定義する場合に使用します。これはRuby < 1.9の遺産で、その文字のASCIIコードを返すために使用されていました。私はあなたが「言語の直交性を破る」という意味を理解していません。

+0

ありがとうsawa、ここで直交性について読むことができます:en.wikipedia.org/wiki/Orthogonality_(programming) - それによってマークダウンリンクを作ることができない奇妙な理由があります。 – fotanus

+1

しかし、どのように、リテラル、文字列リテラル、リテラルラムダ、整数リテラル、リテラル記号などのリテラルはありません浮く配列リテラルのに対し、文字リテラルブレーク直交マップのでしょうか? –

9

それはリテラル文字だ、オペレータではありません。しかし、Rubyには文字型がないため、文字型のインスタンスではなく、文字リテラルが「文字のデフォルト表現」と評価されます。ルビー1.9+では、それは長さ1のStringだ、ルビー1.8で、それは文字のUnicodeコードポイントを表すFixnumです。 #2の再

+0

「文字のデフォルト表現」の引用元がありますか? –

2

、私はそれが有用であることが分かってきた場所は、パラメータが、私は設定していますか私がテストしていた値は、単純にすることが、これが起こったばかりという単一の文字であることを意図していないことを伝えるにあります短い文字列。これは微妙な可読性/文書化の問題ですが、後のメンテナー(自分自身を含む)のために検討する価値があります。

関連する問題