gpt4 book ai didi

scala - def fn[String] 似乎破坏了 Scala/java.lang.String 兼容性

转载 作者:行者123 更新时间:2023-12-03 03:50:48 25 4
gpt4 key购买 nike

你好,堆栈溢出,

我希望你能帮助我解决我的第一个问题:)

所以我在 Scala 类型推断方面遇到了问题。这是代码:

object Problem {

def ok(fn: (String) => Unit) = fn("")

// type mismatch; found: java.lang.String("") required: String
def fail[String](fn: (String) => Unit) = fn("")

}

Scala 在这里期望什么样的字符串?

请注意,这是解释我的问题的最小示例。当我尝试实现一个更复杂的接口(interface)(准确地说是 Play 的 Iteratee)时,最初的问题出现了,所以,不,忽略 [String] 不是一个选项。 (如果有人认为实际代码会有帮助,我会提供它。)

我尝试了 def failed[java.lang.String] ... 但随后它显示 expected ],found .

我确实读过Scala String vs java.lang.String - type inference它对 java.lang.Stringscala.Predef.String 给出了很好的解释,但我仍然无法针对我的具体问题提出解决方案。

有什么想法吗?

编辑:所以这是我尝试实现 http://www.playframework.org/documentation/api/2.0/scala/play/api/libs/iteratee/Iteratee.html 的原始尝试只是我写的是String而不是T。 (使用 T 可以编译,而且这是有道理的!)我的失败;显然我对所有类型参数有点不知所措:

val stream = WS.url("url").get({ headers =>
(new Iteratee[Array[Byte], String] {
def fold[T](done: (String, Input[Array[Byte]]) => Promise[T],
cont: (Input[Array[Byte]] => Iteratee[Array[Byte], String]) => Promise[T],
error: (String, Input[Array[Byte]]) => Promise[T]): Promise[T] =
{
done("something", Input.Empty)
}
})
})

问候,亨德里克

最佳答案

当你写下:

def fail[String](fn: (String) => Unit) = fn("")

方括号 String 之间的类型参数只是一个任意名称,在您的情况下,它将隐藏 scala 或 java 字符串。它完全等同于:

def fail[T](fn: (T) => Unit) = fn("")

如果你想将类型限制为字符串,你只需编写:

def fail(fn: (String) => Unit) = fn("")

它适用于 scala 和 java 字符串(因为它们是相同的)。

关于scala - def fn[String] 似乎破坏了 Scala/java.lang.String 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028191/

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