![](/img/trans.png)
[英]Scala selects wrong implicit conversion from within implicit class method
[英]Converting a Scala implicit conversion method to a 2.10 implicit class
我試圖將以下Scala 2.9隱式轉換方法轉換為2.10隱式類:
import java.sql.ResultSet
/**
* Implicitly convert a ResultSet to a Stream[ResultSet]. The Stream can then be
* traversed using the usual map, filter, etc.
*
* @param row the Result to convert
* @return a Stream wrapped around the ResultSet
*/
implicit def stream(row: ResultSet): Stream[ResultSet] = {
if (row.next) Stream.cons(row, stream(row))
else {
row.close()
Stream.empty
}
}
我的第一次嘗試無法編譯:
implicit class ResultSetStream(row: ResultSet) {
def stream: Stream[ResultSet] = {
if (row.next) Stream.cons(row, stream(row))
else {
row.close()
Stream.empty
}
}
}
我在stream(row)
上收到語法錯誤,因為stream
沒有參數。
正確的方法是什么?
嘗試這個 :
scala> import java.sql.ResultSet
import java.sql.ResultSet
scala> implicit class ResultSetStream(row: ResultSet) {
| def stream: Stream[ResultSet] = {
| if (row.next) Stream.cons(row, row.stream)
| else {
| row.close()
| Stream.empty
| }
| }
| }
defined class ResultSetStream
您將stream
定義為函數,因此stream(row)
無法工作。
您可以從AnyVal
繼承來創建值類並優化代碼:
implicit class ResultSetStream(val row: ResultSet) extends AnyVal {
def stream: Stream[ResultSet] = {
if (row.next) Stream.cons(row, row.stream)
else {
row.close()
Stream.empty
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.