2016-10-15 159 views
0

我使用Breeze庫進行Scala中的矩陣操作。一切看起來不錯,但它不能在編譯時發現的隱式:Scala微風隱式CanMapValues

could not find implicit value for parameter bf: breeze.linalg.support.CanMapValues[breeze.linalg.Matrix[Int],Int,Double,That] 

有問題的功能是這樣的:

import breeze.linalg._ // this is the only import 
def writeMatrixToCsv(path: String, matrix: Matrix[Int]) = csvwrite(new File(path), matrix.mapValues(_.toDouble), separator = ',') 

我不知道如何進行 - 我在微風中尋找默認CanMapValues代碼,但無法找到它。我該如何解決這個問題?謝謝!

+0

你使用任何進口呢?這是什麼csvwrite? – michaJlS

+0

嘿@michaJlS,csvwrite是Breeze方法(請參閱https://github.com/scalanlp/breeze/wiki/Linear-Algebra-Cheat-Sheet)。我在問題中添加了我的導入。問題出在.mapValues中。 – ticofab

回答

0

要解決該問題,可以將CanMapValues類型的隱式參數添加到writeMatrixToCsv函數中。然後它會編譯。我可以看到,Matrix是一個特徵,它不提供一般隱含的CanMapValues,因此您可能必須提供一個用於您將使用的具體矩陣。

def writeMatrixToCsv(path: String, matrix: Matrix[Int])(
    implicit bf:support.CanMapValues[Matrix[Int], Int, Double, Matrix[Double]] 
) = csvwrite(
    new File(path), 
    matrix.mapValues(_.toDouble), 
    separator = ',' 
) 

CanMapValues位於support package object

+0

它編譯!我不知道爲什麼,正如你所說,具體的CanMapValues沒有在任何地方實現。那麼現在它在哪裏發現它的含蓄,爲什麼它現在編譯? – ticofab

+1

在這種情況下,封閉在另一個func中的csvwrite沒有機會找到有效的隱式值,因此必須通過param「讓它進入」。嘗試使用它,讓看看會發生什麼。對於擴展Matrix的某些類,有'CanMapValues'。 – michaJlS

+0

真棒。謝謝! – ticofab