带柯里化的默认参数

发布于 2024-10-18 15:30:10 字数 578 浏览 0 评论 0原文

我可以将一个函数定义为:

def print(n:Int, s:String = "blah") {}
print: (n: Int,s: String)Unit

我可以用以下方式调用它:

print(5) 
print(5, "testing")

如果我柯里化上面的内容:

def print2(n:Int)(s:String = "blah") {} 
print2: (n: Int)(s: String)Unit

我不能用 1 个参数调用它:

print2(5)
<console>:7: error: missing arguments for method print2 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
       print2(5)

我必须提供两个参数。有办法解决这个问题吗?

I can define a function as:

def print(n:Int, s:String = "blah") {}
print: (n: Int,s: String)Unit

I can call it with:

print(5) 
print(5, "testing")

If I curry the above:

def print2(n:Int)(s:String = "blah") {} 
print2: (n: Int)(s: String)Unit

I can't call it with 1 parameter:

print2(5)
<console>:7: error: missing arguments for method print2 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
       print2(5)

I have to supply both parameters. Is there some way around this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如梦亦如幻 2024-10-25 15:30:10

您不能使用默认参数省略 ()

scala> def print2(n:Int)(s:String = "blah") {}
print2: (n: Int)(s: String)Unit

scala> print2(5)()

尽管它适用于隐式:

scala> case class SecondParam(s: String)
defined class SecondParam

scala> def print2(n:Int)(implicit s: SecondParam = SecondParam("blah")) {}
print2: (n: Int)(implicit s: SecondParam)Unit

scala> print2(5)

You can't omit () with default arguments:

scala> def print2(n:Int)(s:String = "blah") {}
print2: (n: Int)(s: String)Unit

scala> print2(5)()

Though it works with implicits:

scala> case class SecondParam(s: String)
defined class SecondParam

scala> def print2(n:Int)(implicit s: SecondParam = SecondParam("blah")) {}
print2: (n: Int)(implicit s: SecondParam)Unit

scala> print2(5)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文