加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:44:37 所属栏目:安全 来源:网络整理
导读:使用命名参数 def f(x : Int = 1,y : Int = 2) = x * y 您的参数名称将成为界面的一部分 f(x=3) 现在,如果要在本地更改参数名称,则必须坚持参数的公共名称: def f(x : Int = 1,y : Int = 2) = { val (a,b) = (x,y) a * b } 如果这是一个真正的问题?是否有
使用命名参数

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

您的参数名称将成为界面的一部分

f(x=3)

现在,如果要在本地更改参数名称,则必须坚持参数的公共名称:

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

解决方法

是的,参数名称实际上是公共接口的一部分.对于任何具有命名参数的语言来说,这是一个“问题” – 或者确实产生了支持命名参数的语言所使用的代码.有时这还不太清楚.

例如,C#3不支持命名参数 – 但VB支持.因此,如果您在C#3中创建一个库,有人在VB中构建它,那么更改参数名称将计为一个重大变化.

最终,其中一些将由重构工具处理,但它可以归结为与公共API的任何其他方面相同的谨慎……你需要非常谨慎.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读