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

时间:2016-02-19 00:40:40

标签: objectscript

These coding guidelines提及(理所当然,我相信)“[...]在函数/方法参数列表中的逗号后插入空格”。

按照一个例子,但接下来是:

  

由于显而易见的原因,此建议不适用于$$$ macro-call中的参数,其中此类额外空格将破坏最终结果。

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

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

执行此方法时,它返回“预期”结果:

foobar

那么,这个建议所指的那些“显而易见的原因”是什么?

2 个答案:

答案 0 :(得分:4)

开发人员很懒惰,我们也不例外。虽然macro-definitions如此灵活,但我可以编写很多有趣的东西,以简化开发过程。 您可以在github上看到我的一个示例here

#define NewTempGN(%gn,%i) set %i=$i(^CacheTemp.MyApp),%gn=$name(^CacheTemp.MyApp(%i))

你不能在逗号之后添加空格,因为这个空格也会出现在变量之前,并且这样的代码可能在语法上变得非法。

$$$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

答案 1 :(得分:2)

另一个原因是某些宏表达式被评估为 until-first-whitespace ,例如##if