数字の1や文字列"hello world"のようにRubyのプログラムの中に直接 記述できる値の事をリテラルといいます。
123
整数
-123
符号つき整数 trap::Numeric
123.45
浮動小数点数
1.2e-3
浮動小数点数
0xffff
16進整数
0b1011
2進整数
0377
8進整数
?a
文字a
のコード(97)
?\C-a
コントロール a のコード(1)
?\M-a
メタ a のコード(225)
?\M-\C-a
メタ-コントロール a のコード(129)
?
表現では全てのバックスラッシュ記法が有効です。
文字コード以外の数値リテラルには、`_
' を含めることができます。
ruby インタプリタは `_
' を単に無視し、特別な解釈は何もしません。
これは、大きな数値の桁数がひと目でわかるように記述するのに便利です。
リテラルの最初と、最後には _
を書くことはできません。(リテラルの
前(符号(+,-)の直後を含む)に _
を置くとローカル変数やメソッド呼び
出しと解釈されます)
*1
1_000_000_000 => 1000000000 0xffff_ffff => 0xffffffff
例:
"this is a string expression\n" 'this is a string expression\n' %q!I said, "You said, 'She said it.'"! %!I said, "You said, 'She said it.'"! %Q('This is it.'\n)
文字列はダブルクォートまたはシングルクォートで囲まれています。
ダブルクォートで囲まれた文字列ではバックスラッシュによるエス
ケープと式展開(後述)が有効になります。シングルクォートで囲ま
れた文字列では、\\
(バックスラッシュそのもの)と
\'
(シングルクォート)、行末の\
(改行を無視します)
を除いて文字列の中身の解釈は行われません。
空白を間に挟んだ文字列リテラルは、コンパイル時に1つの文字列 リテラルと見倣されます。
p "foo" "bar" => "foobar"
%記法 による別形式の文字列表現もあります。
\t
タブ(0x09)
\n
改行(0x0a)
\r
キャリッジリターン(0x0d)
\f
改ページ(0x0c)
\b
バックスペース (0x08)
\a
ベル (0x07)
\e
エスケープ (0x1b)
\s
空白 (0x20)
\nnn
8 進数表記 (n は 0-7)
\xnn
16 進数表記 (n は 0-9,a-f)
\cx
\C-x
コントロール文字 (x は ASCII 文字)
\M-x
メタ x (c | 0x80)
\M-\C-x
メタ コントロール x
\x
文字 x そのもの
文字列式は評価されるたびに毎回新しい文字列オブジェクトを生成 します。
例:
($ruby = "RUBY"の場合) "my name is #{$ruby}" #=> "my name is RUBY" 'my name is #{$ruby}' #=> "my name is #{$ruby}"
ダブルクォート("
)で囲まれた文字列式、コマンド文
字列および正規表現、の中では#{式}
という形式で式
の内容(を文字列化したもの)を埋め込むことができます。式が変数
記号($
,@
)で始まる変数の場合には
{}
を省略して、#変数名
という形式で
も展開できます。文字#
に続く文字が
{
,$
,@
でなければ、その
まま文字#
として解釈されます。明示的に式展開を止
めるには#
の前にバックスラッシュを置きます。
例:
`date` %x{ date }
バッククォート(`
)で囲まれた文字列は、ダブルクォー
トで囲まれた文字列と同様にバックスラッシュ記法
の解釈と式展開
が行なわれた後、コマンドとして実行され、その標準出力が文字列
として与えられます。コマンドは評価されるたびに実行されます。
コマンドの終了ステータスを得るには、$? を
参照します。
%記法 による別形式のコマンド出力もあります。
Unixのシェルのような行指向の文字列リテラルの表現もあります。このよ
うな文字列リテラルを「ヒアドキュメント」と呼びます。
<<
に続いて、引用終了記号になる文字列また
は識別子を指定します。文字列を指定した場合は、その文字列の種
別(""、''、``
)が文字列全体の性質を決定します。
種別のデフォルトはダブルクォートです.
<<
の後ろには空白を置くことはできません。
print <<EOF The price is #{$Price}. EOF print <<"EOF" # 上と同じ The price is #{$Price}. EOF print <<`EOC` # コマンドを実行 echo hi there echo lo there EOC print <<"foo", <<"bar" # 連ねられます I said foo. foo I said bar. bar myfunc(<<"THIS", 23, <<'THAT') Here's a line or two. THIS and here's another. THAT
識別子または文字列の前に -
が置かれた場合、区切り
文字列の前の空白文字 (タブとスペース) が取り除かれます。
これによって区切り文字をインデントに合わせることが出来ます。
if need_define_foo eval <<-EOS # 区切り文字列をインデントできます def foo print "foo\n" end EOS end
例:
/^Ruby the OOPL/ /Ruby/i /my name is #{myname}/o %r|Ruby|
/
で囲まれた文字列は正規表現です。正規表現として解釈される
メタ文字については正規表現を参照してください。
終りの/
の直後の文字は正規表現に対するオプションになります。
オプションの機能は以下の通りです。
i
正規表現はマッチ時に大文字小文字の区別を行わない
o
一番最初に正規表現の評価が行われた時に 一度だけ式展開を行う
x
正規表現中の空白(改行も含む)を無視する。また、バックスラッシュでエス
ケープしない`#
' から改行までをコメントとみなして無視する(ただ
し、コメント中に /
を含めると構文解析に失敗するので注意)
/foo # コメント bar/x
これは /foobar/
と同じ。
空白を含めるには \
のようにエスケープします。
m
複数行モード。正規表現 "." が改行にもマッチするようになる
Ruby は日本語化されているので、$KCODE の値に従って正
規表現中の日本語文字を正しく扱います。$KCODE = "n"
の場合、日本
語文字を一切認識せずにバイト列として扱います。これはデフォルトの動作で
す。
オプションとして n
, e
, s
, u
のいずれかを指定す
ることで正規表現の文字コードを $KCODE の値に関係なく
個々の正規表現リテラルに指定することもできます。
%記法 による別形式の正規表現も指定できます。
正規表現の中では文字列と同じバックスラッシュ記法や 式展開も有効です。
例:
[1, 2, 3] %w(a b c)
文法:
`[' 式`,' ... `]'
それぞれの式を評価した結果を含む配列を返します。 配列はArrayクラスのインスタンスです。
要素が文字列リテラルの場合に限り、%記法 による別形式の 配列表現も指定できます。
例:
{1=>2, 2=>4, 3=>6}
文法:
`{' 式 `=>' 式 `,' ... `}' `{' 式 `,' 式 `,' ... `}'
それぞれの式を評価した結果をキーと値とするハッシュオブジェク トを返します。ハッシュとは任意のオブジェクトをキー(添字)として持 つ配列で、Hashクラスのインスタンスです。
ハッシュ式の要素が1つ以上あり、曖昧でなければ {
, }
は
省略しても構いません。この形式はメソッド呼び出しの引数でよく使われます。
*2
*3
例:
do_something('task'=>'resolve', 'timeout'=>10)
範囲式を参照
例:
(シンボルの例) :class :lvar :method! :andthisis? :$gvar :@ivar :@@cvar :+
文法:
`:' 識別子 `:' 変数名 `:' 演算子
Symbolクラスのインスタンス。
ある文字列とSymbol
オブジェクトは一対一に対応します。
Symbol リテラルに指定できる演算子はメソッドとして再定義できる演算子だ けです。演算子式 を参照して下さい。
文字列リテラル、
コマンド出力、
正規表現リテラル、
配列式
では、%
で始まる形式の記法を用いることができます。
文字列や正規表現では、`"', `/' など(通常のリテラルの区切り文字)を要素
に含めたい場合にバックスラッシュの数をコードから減らす効果があります。
また配列式では文字列の配列を簡単に表現できます。それぞれ以下のように対
応します。
%!STRING!
: ダブルクォート文字列%Q!STRING!
: 同上%q!STRING!
: シングルクォート文字列%x!STRING!
: コマンド出力%r!STRING!
: 正規表現%w!STRING!
: 要素が文字列の配列(空白区切り)!
の部分には改行を含めた任意の非英数字を使うことができます。始ま
りの区切り文字が括弧(`(',`[',`{',`<')である時には、終りの区切り文字は
対応する括弧になります。括弧を区切り文字にした場合、対応が取れていれば
区切り文字と同じ括弧を要素に含めることができます。
%(()) => "()"
配列式の%記法はシングルクォートで囲んだ文字列を空白文字で分割したのと 同じです。たとえば、
%w(foo bar baz)
は['foo', 'bar', 'baz']
と等価です。
バックスラッシュを使って空白を要素に含むこともできます。
%w(foo\ bar baz) => ["foo bar", "baz"]
*1ruby 1.6 feature: 将来(1.6.7 から)、0x などの prefix の直後な
どに指定することはできなくなります。また、_
を連続して書いてもエ
ラーになります。他、細かい部分でこのあたりの規則は見直され統一されまし
た。たぶん
*21=>2, 3=>4, 5=>6, 7=>8 は {1=>2, 3=>4, 5=>6, 7=>8} であるか {1=>2, 3=>4}, {5=>6, 7=>8} であるか曖昧だと思う
*3あらい 2002-02-03: その指摘はさすがに勘弁して欲しいのですが(そんな
こと言ったら brace 省略は到底無理ということになる)まあ、本文の定義が曖
昧なのは確かですね。
p (1,1=>2) # => ok
p (1=>2,3,4,5) # => error
p (1=>2,3,4=>5) # => error
p [1,1=>2] # => error
brace 省略したハッシュリテラルが許せる箇所が引数列の最後以外にもあった
気がしたのですが忘れました