2

可変数の引数を受け入れて各引数を処理する M4 マクロを定義するにはどうすればよいですか? 「shift」および「foreach (例から)」マクロを見てきましたが、それらを使用して独自のマクロをまとめることができないようです。助けてくれてありがとう。

define(UL, `wrap each arg in <li> tag, then wrap the whole output in <ul>')

UL(foo, bar, baz) #returns <ul><li>foo</li><li>bar</li><li>baz</li></ul>
4

1 に答える 1

5

これを解決策として提案しますが、引用エラーが含まれていないことを保証するものではありません.

define(`UL',`<ul>IT($@)<\ul>')dnl
define(`LI',`ifelse(`$1',`', `', `<li>`$1'<\li>')')dnl
define(`IT',`ifelse(`$#', `0',, `$#', `1',`LI(`$1')', 
    `LI(`$1')IT(shift($@))')')dnl
dnl
UL(foo,bar,baz)
UL(`UL',`LI',`IT')
UL(``UL'',``LI'',``IT'')

後世のために、これは確かに引用エラーを含む私の元のソリューションです:

define(`UL',`<ul>IT($@)<\ul>')dnl
define(`LI',`ifelse(`$1',`', `', `<li>$1<\li>')')dnl
define(`IT',`ifelse(`$#', `0',, `$#', `1',`LI(`$1')', 
    `LI(`$1')IT(shift($*))')')dnl
dnl
UL(foo,bar,baz)
UL(`UL',`LI',`IT')
UL(``UL'',``LI'',``IT'')

最初の解決策では、 の最終的な呼び出しは期待どおりでULはありませんが、m4 の引用規則がよくわからないので、何を期待すればよいか本当にわからないため、引用エラーがあると思われます。助けていただければ幸いです。

于 2013-06-06T12:56:28.367 に答える