为什么没有缺省参数?
答案很直白
-
Rust 的设计哲学之一是 Be Explicit,翻译过来就是不要藏着掖着的,越直白越好。函数缺省参数违背了这一条设计哲学,所以没有引入。
- 函数描述的是行为,什么样的输入会导致什么行为应该越明显越好,并且函数名与函数的输入应该直截了当地描述函数的行为。
-
缺省参数使得数据流变得更加散乱,在工程上也有坏处。
-
举例子,如果你尝试过看别人的 Python 代码来复现深度学习模型的话,看到无处不在的默认值肯定会非常头疼,就像下面的例子。简而言之,如果你不喜欢硬编码的绝对文件路径,那你也应该理解没有人想要看一堆全是默认值的代码。
def layer(x, parameter=0.1, use_branch=False): if use_branch: return some_op(x, alpha=parameter) else: return x * parameter x0 = layer(y, 0.2, True) x1 = layer(x0) x2 = layer(x1, use_branch=False)
-
真的没有缺省值吗?
其实也是有的,对于一个类型来说,可以通过impl Default
的方法来指定类型的实例的默认值。但是这个是非常局限的应用,看代码的人可以直接找到impl
块获得所有的默认值信息,所以影响不大。