scala – 匹配表达式语法的动机
匹配表达式的语法非常好:
expr match { case Test(l1) => ... ... } 但它让我疯狂,我不明白为什么使用这种语法而不是匹配(expr)的动机……,就像在一个体面的C后代中的分支语句一样! 我认为没有合理的解释.我没有在Scala编程,Scala网站,in this paper,this thesis,SO上和网络的其他部分找到答案. 这并不是说它有什么不妥,只是它是一个完全的谜.当匹配工作以这种方式工作时,为什么不呢? 有人知道吗?如果没有发现这一点,我认为我不能再忍受这种语言了.我一直在想.我晚上睡不着觉. 解决方法
为了采用类似的Scala语法,模式匹配情况下的保护不需要围绕其条件表达式的括号 – 例如,以下内容:
case i if i % 2 == 0 => i / 2 就像这样有效: case i if (i % 2 == 0) => i / 2 坚持C族风格意味着需要后一种形式,即使括号不是消除歧义所必需的. Scala语言设计师决定在这种情况下减少线路噪声,以保持家族相似性. 我猜在匹配语法中有类似的动机,而且我的眼睛匹配(expr){…}与expr match {…}相比确实看起来非常糟糕(和误导). 另外,就在今天下午,我在x map {…}的选项上重构了别人的x匹配{…}.作为中缀运算符匹配使这两个表达式之间的相似性变得清晰. 关于为什么匹配不仅仅是一种方法的问题,这是David Pollak在the
和Martin Odersky’s answer:
我和马丁在这一次. 请注意,存在一些实际差异(除了简单的“点或非”问题).例如,这不编译: def foo[A,B](f: PartialFunction[A,B])(a: A) = a match f 如果匹配仍然是Any上的一种方法,那么需要一大堆案例将是一个相当奇怪的要求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |