gpt4 book ai didi

Scala可以选择提供命名的默认参数

转载 作者:行者123 更新时间:2023-12-04 04:35:14 25 4
gpt4 key购买 nike

假设我们有一个类构造函数,该构造函数接受具有默认值的参数。

class A(val p1 : Int = 3, val p2 : Int = 4) 

假设我无法控制此类,并且无论如何都无法对其进行修改。我想做的是用p1 = 5,p2 =调用A的构造函数(如果condition1 == true,则为5,否则为默认值)。一种方法是
if(condition1)
x = new A(5,5)
else
x = new A(5)

如您所见,如果有很多参数,并且每个参数必须有条件地提供,那么这很容易变得很大。我想要的是类似的东西
x = new A(p1 = 5, p2 = <if condition1 = true then 5 else default>)

我怎样才能做到这一点?请注意,类A中的字段是val,因此在实例化A之后我无法更改它们。

最佳答案

在我看来,您有三种可能:

  • 创建变量以保存要指定的每个值,完成所有代码以填充值,并在末尾实例化一次A。正如Ionut所述,这需要知道默认值。我不认为创建一个扔掉对象来读取默认值是很棘手的-肯定不如将默认值嵌入它们本身那么重要-而是什么。
  • 使用反射API创建A。我不确定如何执行此操作,但几乎可以肯定您可以传入参数列表,并且默认情况下未指定任何参数。这需要Scala 2.10。在此之前,只有Java Reflection API可用,并且您必须通过可选参数的内部实现来破解,这是令人讨厌的。
  • 使用宏。也是2.10+。我认为准引用应该可以轻松完成此操作,尽管我对它们不太熟悉,所以不能肯定地说。
  • 关于Scala可以选择提供命名的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432905/

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