请帮助我理解为什么第二个def
没有编译,以及如何为其编写第二个def
(在一行中返回Array的第一个条目)。谢谢!
import java.awt.{GraphicsDevice, GraphicsEnvironment}
class SeparatedTestCase {
def does_compile: GraphicsDevice = {
val ge: GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment
val devices: Array[GraphicsDevice] = ge.getScreenDevices
devices(0)
}
def does_not_compile: GraphicsDevice = {
val ge: GraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment
val device0: GraphicsDevice = (ge.getScreenDevices)(0) // <---- compile error
device0
}
}
//Error:(13, 59) no arguments allowed for nullary method getScreenDevices: ()Array[java.awt.GraphicsDevice]
//val device0: GraphicsDevice = (ge.getScreenDevices)(0)
答案 0 :(得分:3)
您必须使用显式括号来调用该方法:
ge.getScreenDevices()(0)
这不会编译,因为第二次调用的含义与
相同ge.getScreenDevices(0)
不会执行您想要的操作,因为getScreenDevices
是一种Java空二进制方法,可以用括号调用或不使用括号调用,如果指定了一组括号,Scala假定您要调用此括号具有这些参数的方法,由于它不接受任何参数,因此当然不起作用。