簡體   English   中英

將Scala隱式轉換方法轉換為2.10隱式類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM