gpt4 book ai didi

scala - 参数的占位符语法限制

转载 作者:行者123 更新时间:2023-12-03 22:47:57 30 4
gpt4 key购买 nike

在阅读了《Scala 编程》一书并进行了一些搜索后,我仍然不明白为什么会这样:

val x = Array[Byte](1, 2, 3)
x.map{Integer.toHexString(_)}

而另一个稍微复杂一点的则没有:
val x = Array[Byte](1, 2, 3)
x.map{Integer.toHexString((_ + 0x100) % 0x100)}

这个更长的选择确实有效:
x.map{b => Integer.toHexString((b + 0x100) % 0x100)}

这是我收到的晦涩错误消息:
error: missing parameter type for expanded function ((x$1) => x$1.$plus(256))

我正在使用:
  • 每个现有参数正好有一个 _
  • 不使用任何内部匿名函数。

  • 括号有害吗?

    最佳答案

    规范为 this section .

    “复杂的东西”的直觉是关于“句法类别 Expr”,而不是“SimpleExpr”,你可以查看 about half-way through the syntax section .

    你可以在那里看到括号里面的东西是 Expr,所以这就是为什么人们会说“它扩展到最里面的括号”来近似语法。

    您通常可以通过使用中缀表示法来避免产生 Expr。但是您的运算符优先级必须有所帮助。

    scala> (1 to 5) map ("x" * _)
    res1: scala.collection.immutable.IndexedSeq[String] = Vector(x, xx, xxx, xxxx, xxxxx)

    scala> (1 to 5) map ("x".*(_))
    res2: scala.collection.immutable.IndexedSeq[String] = Vector(x, xx, xxx, xxxx, xxxxx)

    scala> (1 to 5) map ("x".*(_ + 5))
    <console>:8: error: missing parameter type for expanded function ((x$1) => x$1.$plus(5))
    (1 to 5) map ("x".*(_ + 5))
    ^

    scala> (1 to 5) map ("x" * _ + 5)
    res5: scala.collection.immutable.IndexedSeq[String] = Vector(x5, xx5, xxx5, xxxx5, xxxxx5)

    与之比较:
    scala> (1 to 5) map ("abcdefg" apply _)
    res8: scala.collection.immutable.IndexedSeq[Char] = Vector(b, c, d, e, f)

    scala> (1 to 5) map ("abcdefg" apply _ + 1)
    res9: scala.collection.immutable.IndexedSeq[Char] = Vector(c, d, e, f, g)

    scala> (1 to 5) map ("abcdefg".apply(_ + 1))
    <console>:8: error: missing parameter type for expanded function ((x$1) => x$1.$plus(1))
    (1 to 5) map ("abcdefg".apply(_ + 1))
    ^

    scala> (1 to 5) map ("abcdefg"(_ + 1))
    <console>:8: error: missing parameter type for expanded function ((x$1) => x$1.$plus(1))
    (1 to 5) map ("abcdefg"(_ + 1))
    ^

    关于scala - 参数的占位符语法限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698336/

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