关于 Scala 中占位符的问题

发布于 2024-12-29 18:02:24 字数 370 浏览 3 评论 0原文

考虑 Scala 中的以下定义:

val f = ((_: Int) + 1).toString()

代码将函数文字 _ + 1 的字符串表示形式分配给 f,这很自然,只是这不是我想要的。我打算定义一个函数,它接受 int 参数,将其加 1,并返回其字符串格式。

为了消除歧义,我必须编写一个带有显式参数的 lambda 表达式:

val g = (x: Int) => (x + 1).toString()

那么我是否可以得出占位符语法不适合复杂函数文字的结论? 或者是否有一些规则规定了函数文字的范围?似乎占位符不能嵌套在函数文字中的括号中(定义其类型所需的除外)

Consider the following definition in Scala:

val f = ((_: Int) + 1).toString()

The code assigns to f the string representation of the function literal _ + 1, which is quite natural, except that this is not i want. i intended to define a function that accepts an int argument, increments it by 1, and returns its string format.

To disambiguate, i have to write a lambda expression with explicit parameters:

val g = (x: Int) => (x + 1).toString()

So can i conclude that the placeholder syntax is not suitable for complex function literals?
Or is there some rule that states the scope of the function literal? It seems placeholders cannot be nested in parentheses(except the ones needed for defining its type) within the function literal

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

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

发布评论

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

评论(2

凤舞天涯 2025-01-05 18:02:24

是的,您认为占位符语法除了简单的函数文字之外没有用处,这是正确的。

就其价值而言,您提到的特定情况可以使用占位符语法和函数组合的结合来编写。

scala> val f = ((_: Int) + 1) andThen (_.toString)
f: Int => java.lang.String = <function1>

scala> f(34)
res14: java.lang.String = 35

Yes, you are right in thinking that placeholder syntax is not useful beyond simple function literals.

For what it's worth, the particular case you mentioned can be written with a conjunction of placeholder syntax and function composition.

scala> val f = ((_: Int) + 1) andThen (_.toString)
f: Int => java.lang.String = <function1>

scala> f(34)
res14: java.lang.String = 35
冬天的雪花 2025-01-05 18:02:24

似乎占位符不能嵌套在函数文字中的括号中(定义其类型所需的除外)

这是正确的。请参阅占位符语法用例示例

It seems placeholders cannot be nested in parentheses(except the ones needed for defining its type) within the function literal

This is correct. See the rules for the placeholder syntax and a use case example.

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