[TOP][UP][<-PREV][NEXT->]

リテラル

数字の1や文字列"hello world"のようにRubyのプログラムの中に直接 記述できる値の事をリテラルといいます。

数値リテラル

? 表現では全てのバックスラッシュ記法が有効です。

文字コード以外の数値リテラルには、`_' を含めることができます。 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"

%記法 による別形式の文字列表現もあります。

バックスラッシュ記法

文字列式は評価されるたびに毎回新しい文字列オブジェクトを生成 します。

式展開

例:

($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|

/で囲まれた文字列は正規表現です。正規表現として解釈される メタ文字については正規表現を参照してください。

終りの/の直後の文字は正規表現に対するオプションになります。 オプションの機能は以下の通りです。

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 リテラルに指定できる演算子はメソッドとして再定義できる演算子だ けです。演算子式 を参照して下さい。

%記法

文字列リテラルコマンド出力正規表現リテラル配列式 では、%で始まる形式の記法を用いることができます。 文字列や正規表現では、`"', `/' など(通常のリテラルの区切り文字)を要素 に含めたい場合にバックスラッシュの数をコードから減らす効果があります。 また配列式では文字列の配列を簡単に表現できます。それぞれ以下のように対 応します。

!の部分には改行を含めた任意の非英数字を使うことができます。始ま りの区切り文字が括弧(`(',`[',`{',`<')である時には、終りの区切り文字は 対応する括弧になります。括弧を区切り文字にした場合、対応が取れていれば 区切り文字と同じ括弧を要素に含めることができます。

%(()) => "()"

配列式の%記法はシングルクォートで囲んだ文字列を空白文字で分割したのと 同じです。たとえば、

%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 省略したハッシュリテラルが許せる箇所が引数列の最後以外にもあった 気がしたのですが忘れました


[TOP][UP][<-PREV][NEXT->]