0
我有以下代碼:斯卡拉缺少的參數類型類型類操作
class Pipe[ A ](a: A) {
def |>[ B ](f: A => B) = f(a)
def !>[ B ](f: A => B) : Try[B] = Try(f(a))
def !>[ B, C ](f: B => C)(implicit ev: A =:= Try[B]) : Try[C] = a.map(f)
}
(隱式和應用不包括在內)
我有「缺失的參數類型」錯誤的問題。 下面的代碼編譯正確:
val r1 = 5 |> (x => x + 1)
但是下面無法編譯:
val r6 = 100 !> { x => x * 2 }
除非我寫:
val r6 = 100 !> { x : Int => x * 2 }
那麼,如何各地要鍵入獲得功能?
我尋找類似問題的答案。一種解決方案是咖喱功能。但是在這種情況下,我認爲問題是當A =:= Try [B]時從類Pip [A]的類型A流向B的類型 。
欣賞任何指針。
TIA。
現在瞭解。我正在使用2.12.0並更改!>映射到#>。如果我爲每次使用#>(或使用括號)分配變量,它將起作用。但是,如果我嘗試並鏈接它,它會失敗:''不能證明雙⇒雙= = = scala.util.Try [雙]。 \t - 方法#>沒有足夠的參數:(隱式ev:=:= [Double ⇒ \t Double,scala.util.Try [Double]])scala.util.Try [Double]。未指定的值參數ev。「你能告訴我爲什麼嗎? – user2051561
這顯然是在尋找錯誤的證據,但很難說爲什麼沒有看到實際的代碼。您可以嘗試通過'Try [A]'上的隱式類來提供'#>',並避免使用'=:='。 –
我要爲此設置另一個問題。同時,我會按照你的建議嘗試隱式課程。感謝您花時間看這個。 – user2051561