2

違いは何ですか

MACRO foo BLOCK
...
END

BLOCK foo
...
END

?

歴史的に私は常に後者を使用していましたが、以前は常に前者を使用していたように見える新しいショップに来て、何が違うのか疑問に思っていました.

4

1 に答える 1

2

ブロックは事実上関数であり、呼び出されるMACROたびに再評価され、渡される変数はすべてマクロに対してローカルです。PROCESS名前付きブロックは静的であるか、またはを介し​​て呼び出され、INCLUDE変数のスコープに関する通常の警告が適用されます。

例えば

MACRO foo (arg1, arg2) BLOCK;
    ... do something with arg1 and arg2
END;

...

Foo is a [% foo(bar,baz) %]

BLOCK foo
    ... do something with arg1 and arg2
END;

...

Foo is a [% PROCESS foo arg1=bar arg2=baz %]

要するに、MACRO特に関数呼び出しのように見えて動作するコードの場合、構文ははるかに冗長ではありません。

これはかなり詳細なマニュアルで文書化されています

于 2013-10-31T06:09:33.047 に答える