gpt4 book ai didi

scala - 命名参数会导致维护问题和可读性差?

转载 作者:行者123 更新时间:2023-12-04 16:49:48 26 4
gpt4 key购买 nike

使用命名参数,如

def f(x : Int = 1, y : Int = 2) = x * y

您的参数名称成为界面的一部分
f(x=3)

现在,如果要在本地更改参数名称,则必须保留参数的公共(public)名称:
    def f(x : Int = 1, y : Int = 2) = {
val (a,b) = (x,y)
a * b
}

如果这是一个真正的问题?是否有直接支持这一点的语法?其他语言谁来处理这个?

按照 Jon 的建议,如果您切换参数名称,可能会遇到问题的一个小例子。
trait X{ def f(x : Int, y : Int) }
class A extends X{
override def f(y : Int, x : Int) = println("" + y + x)
}
val a = new A
scala> a.f(x = 1, y = 2)
21
scala> (a : X).f(x = 1, y = 2)
12

最佳答案

是的,参数名称实际上是公共(public)接口(interface)的一部分。对于任何具有命名参数的语言来说,这都是一个“问题”——或者确实产生了支持命名参数的语言所使用的代码。有时这不是很好理解。

例如,C# 3 不支持命名参数,但 VB 支持。因此,如果您在 C# 3 中创建了一个库,有人在 VB 中针对它进行构建,那么更改参数名称将被视为一项重大更改。

最终,其中一些将由重构工具处理,但归结为与公共(public) API 的任何其他方面一样的谨慎......你需要非常谨慎。

使用参数覆盖方法时也应该非常谨慎 - 使用与原始方法相同的参数名称,否则可能会导致一些非常微妙的问题。 (特别是,切换参数名称会非常邪恶......)

关于scala - 命名参数会导致维护问题和可读性差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2857212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com