首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不理解如何在不使用{} curly块的情况下解析多行语句。

不理解如何在不使用{} curly块的情况下解析多行语句。
EN

Stack Overflow用户
提问于 2012-03-23 18:05:22
回答 4查看 3.5K关注 0票数 1

我遵循C家族(PHP是一个想要的!)要求跨越多行的语句必须用曲线括起来。

Scala避免了O‘’Reilly的Scala编程中这段代码中的解析错误。

代码语言:javascript
运行
复制
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
  }

虽然我认为它应该看起来像(功能的主体被附在一起):

代码语言:javascript
运行
复制
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可以解析它,但是程序员能“得到”吗?我不想。我是不是漏掉了一些直观的想法?

如果这样做会导致实际问题(比如可读性差),我应该避免这样的做法吗?

EN

Stack Overflow用户

回答已采纳

发布于 2012-03-23 18:52:53

在Scala中,更多的东西(包括ifmatch和带有yieldfor )返回的结果与其他语言一样。而且更多的数据结构是不变的,这常常导致mapfilterflatMapcollect等的转换链--这也只能给出一个结果。最后但并非最不重要的一点是,Scala对元组有很好的支持,这意味着您通常会将元组作为单个结果返回,而其他语言必须对单个值进行排序。

因此,一般来说,Scala不像其他语言那样处理存储中间值的变量。这意味着函数通常只是一个方程f(a) = b,其中b可能相当复杂,但仍然是一个返回单个结果的链。因此,采用这种语法是很自然的,它立即表明,您不是在玩弄中间结果,而是遵循一种更实用的风格。

应该提到的是,函数语言(除了具有完全不同语法的"lispy“家族之外)有类似的约定。因此,如果您查看Haskell、F#或Erlang,通常不会看到任何用于方法的“块”。有些结构像letcase和(对于Haskell) do,它们看起来可能有点像块,但也是表达式。

票数 3
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9844328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档