這不是確實是輸入問題。問題是:
val relayData = ser.serialize(relayData).fold(throw _, identity)
你在你正在做的方法參數relayData
參考同一行聲明val relayData
。 Scala編譯器不知道你有/想要兩個具有相同名稱的變量,而是將其解釋爲val relayData
的遞歸定義。更改其中一個變量的名稱應該修復錯誤。無論如何,因爲你沒有完全遵循Scala編譯器的要求,所以我認爲它也可以讓你瞭解編譯器甚至希望從你那裏得到什麼(即使它是建議,如果遵循的話,可能會導致你得到另一個似乎沒有多大意義的錯誤,因爲情況)。
它說「遞歸值relayData
需要類型」。這樣做的意義在於,它希望你能簡單地通過具有
val relayData = ...
成爲像
val relayData: Serializable = ...
指定relayData
類型(或代替Serializable
,使用它,你什麼類型想要relayData
有)
它需要這個信息才能創建一個遞歸定義。例如,利用
val x = x + 1
此代碼是......離奇的簡單情況,至少可以這樣說,但我在做什麼是定義在(淺)遞歸的方式x
。但是有一個問題:編譯器如何知道內部x
使用哪種類型?它不能真正確定通過類型推斷的類型,因爲類型推斷涉及到利用的其他定義類型的信息,而這個定義需要x
的類型信息。現在,我們也許能夠推斷出我可能在談論一個Int
,但理論上x
可能是這麼多東西!事實上,這裏的模糊性在行動:
val x: Int = x + 1 // Default value for an Int is '0'
x: Int = 1
val y: String = y + 1 // Default value for a String is 'null'
y: String = null1
所有這一切真的改變了類型標註,但結果是截然不同的,這只是一個非常簡單的例子!所以,是的,總結所有這些... 在大多數情況下,當它抱怨需要類型的遞歸值時,您應該只對可憐的編譯器有一些同情心,並給它它非常渴望的類型信息。它也會爲你做同樣的事,DeLongey!它會爲你做同樣的事情!
這不是一個真正的打字問題。問題是'val relayData = ser.serialize(relayData).fold(throw _,identity)'。您正在聲明一個'val relayData',它與您引用方法參數'relayData'的同一行中。 Scala編譯器不明白你有/想要兩個具有相同名稱的變量,而是將它解釋爲'val relayData'的遞歸定義。更改其中一個變量的名稱應該修復錯誤。 – Destin
那麼這在我的方面顯然被忽視了。你是對的,它確實修復了它。請添加它作爲答案,以便我可以接受它:) – crockpotveggies