このコードの出力は次のようになると思いました
Hello World 1
Hello World 2 3
しかし、私は得る
Hello World 1
Hello World 2 Hello World 3
これがジャムコードです
rule weird ( a : b + : c * : d ? )
{
echo "Hello World $(a)" ;
echo "Hello World $(b)" ;
}
weird 1 : 2 3 ;
Jamの変数拡張ルールは、他の言語とは大きく異なります。ブーストジャムのドキュメントから:
変数展開後のトークンの結果は、トークンのコンポーネントの積です。各コンポーネントは、リテラルの部分文字列または変数参照を置き換えるリストです。
つまり、jamは「HelloWorld $(b)」を「HelloWorld $(b [1])」「HelloWorld $(b [2])」に拡張し、それをエコーしています。
「HelloWorld23」が必要な場合は、echo引数を2つのトークンに分割する必要があります
echo "Hello World" $(b) ;