在def中返回数组的第一个元素

时间:2018-11-14 01:03:00

标签: scala

请帮助我理解为什么第二个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)

1 个答案:

答案 0 :(得分:3)

您必须使用显式括号来调用该方法:

ge.getScreenDevices()(0)

这不会编译,因为第二次调用的含义与

相同
ge.getScreenDevices(0)

不会执行您想要的操作,因为getScreenDevices是一种Java空二进制方法,可以用括号调用或不使用括号调用,如果指定了一组括号,Scala假定您要调用此括号具有这些参数的方法,由于它不接受任何参数,因此当然不起作用。