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],而不是具有特殊的无击键值,正如最后一句所说:这只是单元测试,返回值由实际应用程序设置。