読者です 読者をやめる 読者になる 読者になる

福澤テクノロジー

おっさんプログラマーが、主に技術的な話をするブログ。

ALCS(仮) 仕様まとめ

ALCS(仮)

新しいリテラルのアイデア。
文字列とクロージャの配列を生成する表記法。
Array Literal of Closures and Strings の略。
(もっと良いネーミングは無いものか)

仕様

  1. %P
  2. %W と似ている。 %W では #{} による式展開をその場で実行して文字列化してしまうのに対して、 %P ではProcオブジェクトとして配列の1要素とする。

    %W(foo asd#{1+2}qwe bar)   # => ['foo', 'asd3qwe', 'bar']
    %P(foo asd#{1+2}qwe bar)   # => ['foo', 'asd', Proc.new{1+2}, 'qwe', 'bar']

  3. %p

  4. %Pでは空白文字を要素の区切りとするが、%pでは改行文字を区切りとして、改行文字自身もデータに含む。
    行頭、行末の空白文字は削除される。

    %P(foo
        asd#{1+2}  qwe
        bar)
    # => ["foo", "asd", Proc.new{1+2}, "qwe", "bar"]
    %p(foo
        asd#{1+2}  qwe
        bar)
    # => ["foo\n", "asd", Proc.new{1+2}, "  qwe\n", "bar"]

  5. <<<

  6. ヒアドキュメント形式。
    改行文字を区切りとして、改行文字自身もデータに含む。
    空白文字も全部含む。

    <<<EOH
    foo
       asd#{1+2}qwe
       bar
    EOH
    # => ["foo\n", "   asd", Proc.new{1+2}, "qwe\n", "   bar\n"]
    <<<'EOH'
    foo
       asd#{1+2}qwe
       bar
    EOH
    # => ["foo\n", "   asd\#{1+2}qwe\n", "   bar\n"]

関連エントリ

(追記:2013/3/23)
pull request してみましたが、mrubyコアには実験的新機能は入れないとの事で、リジェクトされました。
使ってみたい人は、僕のブランチから取って行って下さい。

(追記:2013/9/28)
ALCSを Lazy Expression Expansion に改名しました。
Lazy Expression Expansion - 福澤テクノロジー