此建议对 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
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