主函数参数中@的含义及string[]@a与string[] args的区别
D语言
string[]@a与string[] args的区别及用法 语法差异
这是D语言的专属语法:
string[] args是main函数接收命令行参数的常规写法,数组按D语言默认规则传递(数组本质是切片,传递的是指针+长度,并非完整拷贝,但参数声明属于常规值传递形式)。string[]@a等价于ref string[] a,表示按引用传递命令行参数数组。不过在main函数场景下,这种写法没有实际功能价值——毕竟不会有人修改命令行参数后再返回给调用进程。
为什么代码里用string[]@a?
这段代码来自代码高尔夫场景,核心目标是用最少字符完成功能。对比两者的字符数(不含空格):
string[] args共10个字符string[]@a共8个字符
少2个字符在代码高尔夫里是很关键的优化,所以作者选择了更短的写法,同时@a作为变量名比args更短,且符合D语言语法规范。
什么时候用Type@var写法?
在D语言里,Type@var是ref Type var的语法糖,适合这些场景:
- 需要修改函数参数,且希望修改同步到函数外部(按引用传递)
- 传递大型自定义结构体/类时,避免拷贝带来的性能损耗(D数组本身是切片,拷贝开销极低,所以数组场景用得少)
- 代码高尔夫这类追求极致短代码的场景
内容的提问来源于stack exchange,提问作者rnso
相关产品推荐
相关产品推荐

