此建议对 InterSystem Russia 的 github 编码指南(宏)意味着什么?

What does this recommendation mean on InterSystem Russia's github coding guidelines (macro)?

These coding guidelines 提到(我相信这是理所当然的)“[...]在 functions/methods 参数列表中的逗号后插入空格”。

下面是一个例子,但随后是:

For obvious reasons this recommendation not applies to arguments in $$$macro-call, where such extra spaces will break final result.

我不是经验丰富的 ObjectScript 开发人员,远非如此,所以出于好奇我尝试了这个:

ClassMethod foo()
{
    #define concat(%1, %2) %1 _ %2
    w $$$concat("foo", "bar"), !
}

并且在执行此方法时 returns "expected" 结果:

foobar

那么,"obvious reasons" 这条建议指的是什么?

开发者都是懒惰的,我们也不例外。而 macro-definitions 如此灵活,我可以写很多有趣的东西,简化开发过程。 您可以在 github.

查看我的示例之一 here
#define NewTempGN(%gn,%i) set %i=$i(^CacheTemp.MyApp),%gn=$name(^CacheTemp.MyApp(%i))

不能在逗号后加space,因为这个space也会出现在变量前,这样的代码在语法上可能不合法。

$$$NewTempGN(gn, ii)
#; transform to
set  ii=$i(^CacheTemp.MyApp),gn=$name(^CacheTemp.MyApp( ii))

再举一个例子

#define forAll(%gn,%key) set %key="" for { set %key=$order(@%gn@(%key)) quit:%key=""
#define forEnd }

#; some global structure which you want to write
set gn=$na(^mtemp("test"))
set @gn@("val1")
set @gn@("val2")
set @gn@("val1")

#; and simple use with macro
$$$forAll(gn,val)
   write !,val
$$$forEnd

另一个原因是某些宏表达式被计算为till-first-whitespace,例如##if