Scala Copy() 奇怪的行为

发布于 2024-10-01 18:57:54 字数 472 浏览 5 评论 0原文

当我使用 Scala-2.8 中添加的自动生成的 copy() 方法时,我遇到了一些奇怪的行为。

根据我的阅读,当您将给定的类声明为案例类时,会自动为您生成很多内容,其中之一就是 copy() 方法。所以你可以执行以下操作...

case class Number(value: Int)
val m = Number(6)

println(m)                     // prints 6

println( m.copy(value=7) )     // works fine, prints 7

println( m.copy(value=-7) )    // produces:  error: not found: value value

println( m.copy(value=(-7)) )  // works fine, prints -7

如果这个问题已经被问过,我很抱歉,但是这里发生了什么?

I'm experiencing an odd bit of behavior when I use the auto-generated copy() method that was added in Scala-2.8.

From what I've read, when you declare a given class as a case-class, a lot of things are auto-generated for you, one of which is the copy() method. So you can do the following...

case class Number(value: Int)
val m = Number(6)

println(m)                     // prints 6

println( m.copy(value=7) )     // works fine, prints 7

println( m.copy(value=-7) )    // produces:  error: not found: value value

println( m.copy(value=(-7)) )  // works fine, prints -7

I apologize if this question has already been asked, but what is going on here?

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

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

发布评论

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

评论(1

笨笨の傻瓜 2024-10-08 18:57:54

Scala 允许许多其他语言不允许的方法名称,包括 =-。您的参数被解析为 value =- 7,因此它正在寻找 value 上不存在的方法 =-。您的解决方法都改变了表达式的解析方式,以拆分 =-

scala> var foo = 10
foo: Int = 10

scala> foo=-7
<console>:7: error: value =- is not a member of Int
       foo=-7
       ^

Scala allows many method names that other languages don't, including =-. Your argument is being parsed as value =- 7 so it is looking for a method =- on value which doesn't exist. Your workaround all change the way the expression is parsed to split up the = and the -.

scala> var foo = 10
foo: Int = 10

scala> foo=-7
<console>:7: error: value =- is not a member of Int
       foo=-7
       ^
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文