如何在 D 中为函数输入别名参数?
How to enter by-name argument to a function in D?
我正在努力按名称将参数传递给定义了默认参数值的函数:
import std.stdio;
void main() {
void foo(int x=1, int y=2, int z=3) {
writefln("x=%s, y=%s, z=%s", x, y, z);
}
foo(10, 20, 30); // ok, prints: x=10, y=20, z=30
foo(z=30); // Error: undefined identifier 'z'
}
这是一个非常基本的需求。这样的函数可以有 10 个或更多参数,并且可以使用不同的参数集调用多次。每次都列出所有参数是无法忍受的——这需要精确了解位置,甚至可能在我的应用程序的新版本中发生变化。或者我的应用程序的新版本可以更改默认值,我必须检查所有源代码才能更改它。
我觉得这么基础的东西一定要用D这样综合的语言
D 没有那个功能。有关于它的讨论,但我怀疑它是否会命名参数...
您所要求的是否是 "basic thing" 是值得商榷的。我是一群认为命名参数只会导致复杂代码的开发人员。 Python 就是一个很好的例子。我看到函数有 20 个命名参数,因为多年来开发人员一直将它们添加到函数中,结果变得一团糟...
当你的函数有 10 个参数时,你的设计很可能是错误的。
最后,命名参数会引入额外的开销并影响性能。这是一篇来自 C# 世界的有趣文章:http://www.dotnetperls.com/named-parameters .
我正在努力按名称将参数传递给定义了默认参数值的函数:
import std.stdio;
void main() {
void foo(int x=1, int y=2, int z=3) {
writefln("x=%s, y=%s, z=%s", x, y, z);
}
foo(10, 20, 30); // ok, prints: x=10, y=20, z=30
foo(z=30); // Error: undefined identifier 'z'
}
这是一个非常基本的需求。这样的函数可以有 10 个或更多参数,并且可以使用不同的参数集调用多次。每次都列出所有参数是无法忍受的——这需要精确了解位置,甚至可能在我的应用程序的新版本中发生变化。或者我的应用程序的新版本可以更改默认值,我必须检查所有源代码才能更改它。
我觉得这么基础的东西一定要用D这样综合的语言
D 没有那个功能。有关于它的讨论,但我怀疑它是否会命名参数...
您所要求的是否是 "basic thing" 是值得商榷的。我是一群认为命名参数只会导致复杂代码的开发人员。 Python 就是一个很好的例子。我看到函数有 20 个命名参数,因为多年来开发人员一直将它们添加到函数中,结果变得一团糟...
当你的函数有 10 个参数时,你的设计很可能是错误的。
最后,命名参数会引入额外的开销并影响性能。这是一篇来自 C# 世界的有趣文章:http://www.dotnetperls.com/named-parameters .