我遵循C家族(PHP是一个想要的!)要求跨越多行的语句必须用曲线括起来。
Scala避免了O‘’Reilly的Scala编程中这段代码中的解析错误。
def apply(specification: String): Option[Widget] = specification match {
case ButtonExtractorRE(label) => new Some(new Button(label))
case TextFieldExtractorRE(text) => new Some(new TextField(text))
case _ => None
}虽然我认为它应该看起来像(功能的主体被附在一起):
def apply(specification: String): Option[Widget] = {
specification match {
case ButtonExtractorRE(label) => new Some(new Button(label))
case TextFieldExtractorRE(text) => new Some(new TextField(text))
case _ => None
}
}虽然Scala可以解析它,但是程序员能“得到”吗?我不想。我是不是漏掉了一些直观的想法?
如果这样做会导致实际问题(比如可读性差),我应该避免这样的做法吗?
发布于 2012-03-23 18:52:53
在Scala中,更多的东西(包括if、match和带有yield的for )返回的结果与其他语言一样。而且更多的数据结构是不变的,这常常导致map、filter、flatMap、collect等的转换链--这也只能给出一个结果。最后但并非最不重要的一点是,Scala对元组有很好的支持,这意味着您通常会将元组作为单个结果返回,而其他语言必须对单个值进行排序。
因此,一般来说,Scala不像其他语言那样处理存储中间值的变量。这意味着函数通常只是一个方程f(a) = b,其中b可能相当复杂,但仍然是一个返回单个结果的链。因此,采用这种语法是很自然的,它立即表明,您不是在玩弄中间结果,而是遵循一种更实用的风格。
应该提到的是,函数语言(除了具有完全不同语法的"lispy“家族之外)有类似的约定。因此,如果您查看Haskell、F#或Erlang,通常不会看到任何用于方法的“块”。有些结构像let、case和(对于Haskell) do,它们看起来可能有点像块,但也是表达式。
https://stackoverflow.com/questions/9844328
复制相似问题