【问题标题】:How do I declare a default Tuple function parameter in a Scala?如何在 Scala 中声明默认的元组函数参数?
【发布时间】:2020-01-19 10:19:12
【问题描述】:

我想声明一个函数,它接收一个字符串和一个 Tuple2,第一个值是布尔值,第二个值是任何类型。 tuple2 应该有一个默认值,以防它没有传递给函数

我尝试使用以下代码将布尔值设置为 false,但失败得很惨。

def setSet(key: String, value: Any, tuple2: Tuple2[Boolean, Any] = tuple2._1 = false) 

【问题讨论】:

  • 如果可能尽量避免Any,但由于tuple2 采用Any 值,您可以将任何值设置为值,所以也许尝试None 就像def setSet(key: String, value: Any, tuple2: (Boolean, Any) = (false, None)) 一样
  • 如果setSet("foo", "bar")被调用,tuple2的值应该是多少?您不能创建只有一个值的两个元素元组。或者您是否期望使用 value 参数?
  • 你能解释一下你想做什么吗? Any 几乎总是一种代码气味。另外,您提出的解决方案没有太大意义。
  • 你们是对的,因为我的解决方案最终没有奏效......我需要创建一个默认值 Tuple2(Boolean,) 默认必须为 false第一个 Tuple 值,第二个类型只要是 false 就无关紧要((如果我覆盖默认值,我会提供类型)
  • 好吧,您可以只使用setSet(key: String, value: Any, tuple: (Boolean, Any) = (false, 0) 或其他任何东西,而不是零,即使您的旧解决方案也可以。但问题是,这并没有多大意义。正如我所说,你确定你真的需要一个Any吗?这通常是糟糕设计的标志。

标签: scala default-parameters


【解决方案1】:

尝试重载方法

def setSet(key: String, value: Any, tuple2: Tuple2[Boolean, Any]): Unit = println(s"key=$key, value=$value, tuple2=$tuple2")

def setSet(key: String, value: Any, any: Any): Unit = setSet(key, value, (false, any))

setSet("a", "b", 1) // key=a, value=b, tuple2=(false,1)
setSet("a", "b", (true, 2)) // key=a, value=b, tuple2=(true,2)

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2021-07-04
    • 2014-07-05
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多