【发布时间】:2016-07-28 05:55:01
【问题描述】:
尝试使用类型参数扩展贷款模式并获得下一个错误。 看起来只是一个语法错误。 我确实怀疑这是一个柯里化限制?在我的情况下,必须以某种方式提供返回类型。 谢谢!
import java.io._
//def withPrintWriter(file: File)( op: PrintWriter => Unit) {
def withPrintWriter[T: Numeric](file: File)(implicit count: Numeric[T])( op: PrintWriter => Unit) {
import count._
val writer = new PrintWriter(file)
try {
for(x <- 0 to count.toInt() )
{
op(writer)
}
} finally {
writer.close()
}
}
val file = new File("date.txt")
withPrintWriter[Int]( file )( 5 ){
//withPrintWriter( file ){
writer => writer.println( new java.util.Date )
}
错误: c:\Sources\scala\main.scala:101: 错误:'=' 预期但 '(' 找到。 def withPrintWriter[T: Numeric](file: File)(隐式计数: Numeric[T])( 操作:PrintWriter => 单位){ ^ c:\Sources\scala\main.scala:115: 错误:简单表达式的非法开始 val 文件 = 新文件(“date.txt”) ^
【问题讨论】:
-
带有
implicit的参数列表必须是最后一个,使用T : Numeric就不需要隐式参数。def withPrintWriter[T](file: File)(op: PrintWriter => Unit)(implicit count: Numeric[T]): Unit或def withPrintWriter[T : Numeric](file: File)(op: PrintWriter => Unit): Unit(在有趣的正文中使用val count = implicitly[Numeric[T]]。 -
感谢您的提示。我设法解决了函数签名问题: withPrintWriter[T: Numeric](file: File)( op: PrintWriter => Unit)(implicit count: T) : Unit ;但是在调用此函数时出现问题: val file = new File("date.txt") val count : Int = 5 withPrintWriter[Int]( file )( writer => writer.println( new java.util.Date ) ) ( count ) 错误:没有提供足够的参数! :(
-
implicit count: T那里没有意义 -
知道了!它的工作完美!谢谢
标签: scala