在Scala编程第3版中。我对代码 ' If found I need the value from Sheet2 that is in Col B of the matching
With ThisWorkbook
.Sheets("Sheet1").Cells(cell.Row, 2).Value =.Sheets("Sheet2").Cells(Application.Match(cell, r2, 0), 2).Value
End With
"WithPrintWriter(new File("date.txt"), a => a.println(new java.util.Date) )}"
我使用scala的术语来解释函数调用中的 1 import java.io._
2
3 object WithPrintWriter1 {
4 def withPrintWriter(file: File, op: PrintWriter => Unit) {
5 val writer = new PrintWriter(file)
6 try {
7 op(writer)
8 } finally {
9 writer.close()
10 }
11 }
12 def main(args: Array[String]) {
13 withPrintWriter(
14 new File("date.txt"),
15 a => a.println(new java.util.Date)
16 )
17 }
18 }
,这是一个函数文字,参数是a并映射到a.println(new java.util.Date)函数。但是withPrintWriter函数的原型需要两种类型,第一种是File,它适用于新文件(" date.txt"),而另一种是函数值,它采用PrintWriter类,返回一个单位(不是有趣的结果)。我们传递给第二个参数是a=> a.println(new java.util.Date)
,它的类型是什么。函数需要一个as参数,函数体是a.println(new java.util.Date)。你觉得它太奇怪了吗? scala编译器如何完成这种代码?
a => a.println(new java.util.Date)
上面的代码会产生错误。 scala_test / WithPrintWriter1.scala:15:错误:缺少扩展函数的参数类型((x $ 2)=> x $ 2.println(1)) _ => _.println(1))。 为什么占位符会产生错误。这是scala编译器无法推断出类型的原因吗?但我们可以将sub_line字符替换为任何字符,例如' a'' b'' c'等等也没有类型。我很困惑。
任何帮助将不胜感激,谢谢。
我尝试了这个代码,它添加了PrintWriter类型。没关系。 也许可以省略类型。
1 import java.io._
2
3 object WithPrintWriter1 {
4 def withPrintWriter(file: File, op: PrintWriter => Unit) {
5 val writer = new PrintWriter(file)
6 try {
7 op(writer)
8 } finally {
9 writer.close()
10 }
11 }
12 def main(args: Array[String]) {
13 withPrintWriter(
14 new File("date.txt"),
15 _ => _.println(1))
16 }
17 }
虽然我用_替换a(_:PrintWriter),这会产生错误。 scala_test / WithPrintWriter2.scala:15:错误:扩展函数缺少参数类型((x $ 2)=> x $ 2.println(new java.util.Date())) (_:PrintWriter)=> _.println(new java.util.Date) 这太有趣了。 帮助
答案 0 :(得分:2)
a => a.println(new java.util.Date)
...实际上是......的简写。
a: PrintWriter => a.println(new java.util.Date)
编译器已推断出类型,因为它知道withPrintWriter()
方法的第二个参数应该是类型PrintWriter => Unit
,即函数类型PrintWriter
输入并且没有任何意义,Unit
,结果。
这不会起作用,_ => _.println(1)
,因为下划线具有特殊意义。要正确使用它,您可以写:_.println(1)
在此上下文中,单个下划线是:a => a