2014-04-28 29 views
0

我得到了這個類似的問題,但它並沒有幫助我。 (Anorm parse float values)。

我可以誠實地說,我不明白這個問題的解決方案。
我得到這個complie時錯誤:無法找到參數c的隱式值:anorm.Column [Float]

could not find implicit value for parameter c: anorm.Column[Float] 

def getInformation(id: Long): List[(Float, Float, Float)] = { 
    DB.withConnection { implicit con => 
     val query = SQL("select principal,interest,value from myTable where userId={id} and status=true").on("id"->id) 
     val result = query().map { row => 
     Tuple3(row[Float]("principal"), row[Float]("inetrest"), row[Float]("value")) 
     // ^
     }.toList 
     return result 
    } 
    } 
+0

您是否在您的作用域中標記爲隱式的所述類型的變量? (只需在'val'前加'implicit') – bluenote10

+0

你需要這個問題的更多幫助嗎? – bluenote10

回答

1

試試這個...

def getInformation(id: Long): List[(Float, Float, Float)] = { 
    DB.withConnection { implicit con => 
     val query = SQL("select principal,interest,value from myTable where userId={id} and status=true").on("id"->id) 
     val result = query().map { row => 
     Tuple3(row[Float]("principal").asInstanceOf[Float], row[Float]("inetrest").asInstanceOf[Float], row[Float]("value").asInstanceOf[Float]) 
     }.toList 
     return result 
    } 
    } 

implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) => 
val MetaDataItem(qualified, nullable, clazz) = meta 
value match { 
    case d: Float => Right(d) 
    case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified)) 
} 
} 
2

也許implicits的簡短評論幫助你。讓我們構建一個非常簡單的例子:

// some class which will be used as implicit (can be anything) 
case class SomeImplicitInformation(maybe: Int, with: Int, data: Int) 

// lets assume we have a function that requires an implicit 
def functionRequiringImplicit(regularParameters: Int)(implicit imp: SomeImplicitInformation) { 
    // ... 
} 

// now if you try to call the function without having an implicit in scope 
// you would have to pass it explicitly as second parameter list: 
functionRequiringImplicit(0)(SomeImplicitInformation(0,0,0)) 

// instead you can declare an implicit somewhere in your scope: 
implicit val imp = SomeImplicitInformation(0,0,0) 

// and now you can call: 
functionRequiringImplicit(0) 

你得到的錯誤簡單地說,在不anorm.Column[Float]的範圍爲隱式。您可以通過將其隱式添加到您的作用域或明確傳遞它來解決它。

更詳細的說明適用於您:由於Column伴隨對象僅爲rowToDouble提供隱式,因此您只需使用the code that is linked in your question即可。爲了讓它起作用,請在結果計算之前進行。稍後,您可能希望將其放在某個封閉範圍內的val

0

某些函數可以接受我們所說的隱式參數。在某些情況下,這些參數可以從上下文中導出。如果找不到這些參數,則必須手動指定它們。如果你希望一個參數被用作一個隱含的一個,它必須聲明隱含的,比如這樣:

implicit val myVal = ... 

它可以在當前塊或在一個封閉的一個(在類體內進行,例如甚至有時在進口)

您得到的錯誤似乎與此功能有關。您正在使用需要anorm.Column類型的參數的函數[Float]。該參數被定義爲隱式的,以便可以使用隱式值並且您的代碼可能更簡潔。不幸的是,你的代碼似乎沒有這樣的隱含價值,所以它失敗了。

+0

'隱式val查詢'和'隱式val結果'但是同樣的錯誤發生 –

+0

@LOL:不需要'隱式val nameDoesNotPlayARole:anorm.Column [Float] = ...' - 現在把它放在行前你的結果計算。 – bluenote10

相關問題