Use*_*291 7 error-handling scala compiler-errors
private def foo(a:A):B = a match{
case A(...) =>
val x = a.b //error: wrong forward reference a
...
}
Run Code Online (Sandbox Code Playgroud)
在A(...)中没有提到b的情况下,如果这很重要.
我在谷歌上试过我的运气,但我似乎只发现有错误涉及前向引用的帖子,但没有解释这个特定错误的实际含义.
如果有人可以帮助我,我将不胜感激.
Use*_*291 18
好吧,我现在不觉得自己很蠢......
private def foo(a:A):B = a match{
case A(...) =>
val x = a.b //error: wrong forward reference a
...
val a = ... //<-- THAT's the reason for the error
...
}
Run Code Online (Sandbox Code Playgroud)
因此,简单的重命名将解决此问题:
private def foo(aa:A):B = aa match{
case A(...) =>
val x = aa.b
...
val a = ...
...
}
Run Code Online (Sandbox Code Playgroud)
这里试图解释@User1291 的回答中没有提到的内容。
我是 Scala 和 Java 的新手,所以答案对我来说并不明显。我很惊讶在我的(简化的)代码中遇到了这个错误:
object Main {
val data = getData()
def getUser() = {
getUserFrom(data) // error: Wrong Forward Reference
}
}
Run Code Online (Sandbox Code Playgroud)
错误的前向引用相当于 Java 的非法前向引用,这是一种奇特的方式,表示您不能引用编译时未知的值。在这种情况下,getData()只能在运行时返回值,并且引用data会出现此错误。
当我尝试更改代码以引用已知字符串时,正如预期的那样,错误消失了:
object Main {
val name = "PieOhPah"
def getUser() = {
getUserFrom(name)
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是用函数关闭该值并从内部访问它,因为函数直到运行时才会计算:
object Main {
val data = getData()
def getUser(userData: UserData) = {
getUserFrom(userData)
}
// Invoke the method later with `data`
print(getUser(data).name)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10237 次 |
| 最近记录: |