リテラル型
値には「型」がございますの。数なのか、文字なのか、真偽なのか。 Pasta は書かれたリテラルを、決まった優先順位で自動的に見分けますわ。 このルールを知っておけば、「なぜか文字列扱いされる」といった戸惑いとは無縁ですわよ。
リテラル値は、変数代入・関数引数・属性値などで使用される。Pasta は書かれた値を次の優先順位で型変換する。
型変換ルール
| 優先度 | 値 | 型 |
|---|---|---|
| 1 | true / false | bool |
| 2 | 「...」 または "..."(引用符あり) | String(引用符あり) |
| 3 | 小数点を含む数値 | f64 |
| 4 | 小数点なしの数値 | i64 |
| 5 | その他 | String |
上から順に判定され、最初に一致した型が採用される。
true → bool
false → bool
「こんにちは」 → String(空白も保持)
Hello → String
3.14 → f64
42 → i64
真偽値(bool)
true / false はそのまま真偽値として解釈される。
$is_active:true
$done:false
文字列(String)
文字列は引用符の有無で扱いが変わる。
- 引用符あり: 全角の
「...」または半角の"..."で囲む。空白も文字列の一部として保持される。 - 引用符なし: 空白は区切り文字として認識され、文字列に含まれない。
# 日本語文字列
$greeting:「こんにちは」
# 英語文字列
$message:"Hello, World!"
空白を含む文字列は必ず引用符で囲む。引用符の有無で値の分割が変わる点に注意する。
hello world → String "hello" と String "world"(2 つの値)
「hello world」 → String "hello world"(1 つの値)
文字列エスケープ
半角ダブルクォート文字列内では、バックスラッシュ \ でエスケープできる。
| エスケープ | 意味 |
|---|---|
\n | 改行 |
\\ | バックスラッシュ |
\" | ダブルクォート |
数値(i64 / f64)
数値は符号(- / -)と数字、任意の小数部からなる。小数点を含めば f64、含まなければ i64 となる。数字は ASCII 数字(0-9)と全角数字(0-9)の両方が使える。
$count:10 # i64
$offset:-5 # i64
$pi:3.14 # f64
$delta:-2.5 # f64
単語値での引用符エスケープ
単語定義の値にリテラルの引用符を含めたい場合は、二重の括弧を使う(詳細は 単語定義)。
@会話:「「セリフ」」 # 実行時に「セリフ」として展開される
型の見分け方が分かれば、値の扱いで悩むことはございませんわ。 さあ、いよいよキャラクターが喋り出す「アクション行」へ参りましょう!
権威的仕様: リテラル型の厳密な定義は doc/spec/05-literals.md を参照。文字列・数値リテラルの字句構造は doc/spec/02-markers.md も参照。