Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Scala中,有没有更好的方法来选择列表的第一个元素_List_Scala - Fatal编程技术网

List 在Scala中,有没有更好的方法来选择列表的第一个元素

List 在Scala中,有没有更好的方法来选择列表的第一个元素,list,scala,List,Scala,目前,我使用它来选择列表的第一个元素: def Get_Read_Key = { logger.entering (TAG, "Get_Read_Key") val Retval = if (Read_Key_Available) { val Retval = Keystrokes.head Keystrokes = Keystrokes.tail Retval }

目前,我使用它来选择列表的第一个元素:

   def Get_Read_Key =
   {
      logger.entering (TAG, "Get_Read_Key")

      val Retval = if (Read_Key_Available)
      {
         val Retval = Keystrokes.head

         Keystrokes = Keystrokes.tail

         Retval
      }
      else
      {
         calculator.ui.IKey.No_Key
      } // if

      logger.exiting (TAG, "Get_Read_Key", Retval)
          Retval
   } // Get_Read_Key

   def Read_Key_Available = Keystrokes.size > 0
但它看起来有点笨拙——尤其是双“后退”。有更好的方法吗?或者这仅仅是使用不可变列表的代价


背景:该例程用于单元测试模拟类–设置返回类型。

您可以使用模式匹配:

Keystrokes match {
  case h::t => 
    KeyStrokes = t
    h
  case _ => 
    calculator.ui.IKey.No_key
}

您可以使用模式匹配:

Keystrokes match {
  case h::t => 
    KeyStrokes = t
    h
  case _ => 
    calculator.ui.IKey.No_key
}
您正在标准库中的列表上实现迭代器

val it = Keystrokes.iterator
def Read_Key_Available = it.hasNext
def Get_Read_Key = if(it.hasNext) it.next() else calculator.ui.IKey.No_Key
您正在标准库中的列表上实现迭代器

val it = Keystrokes.iterator
def Read_Key_Available = it.hasNext
def Get_Read_Key = if(it.hasNext) it.next() else calculator.ui.IKey.No_Key

如果击键列表中的第一个元素不为空,则以下代码将获取该元素,否则将获取calculator.ui.IKey.No_键:

Keystrokes.headOption.getOrElse( calculator.ui.IKey.No_Key )
另外,将击键重新分配到尾部是不良设计的明确标志。相反,您应该在算法中使用themel已经存在的列表迭代功能。很可能使用诸如map或foreach之类的方法可以解决您的问题

p.p.S.您违反了以下几点:

变量、值、方法和函数名以小写字母开头 camelCase用于分隔单词,而不是下划线。事实上,由于Scala对该特定字符有特殊处理,因此非常不鼓励使用下划线
如果击键列表中的第一个元素不为空,则以下代码将获取该元素,否则将获取calculator.ui.IKey.No_键:

Keystrokes.headOption.getOrElse( calculator.ui.IKey.No_Key )
另外,将击键重新分配到尾部是不良设计的明确标志。相反,您应该在算法中使用themel已经存在的列表迭代功能。很可能使用诸如map或foreach之类的方法可以解决您的问题

p.p.S.您违反了以下几点:

变量、值、方法和函数名以小写字母开头 camelCase用于分隔单词,而不是下划线。事实上,由于Scala对该特定字符有特殊处理,因此非常不鼓励使用下划线
您可能会受益于返回选项[Keystroke],而不是具有特殊的无击键值,如最后一句所述:这只是单元测试,返回值由实际应用程序设置。您可能受益于返回选项[Keystroke],而不是具有特殊的无击键值,正如最后一句所说:这只是单元测试,返回值由实际应用程序设置。