加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala是否具有少量底层语法特征?

发布时间:2020-12-16 21:30:55 所属栏目:安全 来源:网络整理
导读:Scala是一种有趣的语言,声称简洁,可扩展(通过在库中指定许多功能而不是编译器),并支持DSL. 为了实现这一点,它有很多运算符和编译器调整(例如,支持中缀运算符,例如:_ *来展开序列). 我发现许多操作符(“Scala”编程指南中的2?页)和编译器调整混乱.公平地说,
Scala是一种有趣的语言,声称简洁,可扩展(通过在库中指定许多功能而不是编译器),并支持DSL.
为了实现这一点,它有很多运算符和编译器调整(例如,支持中缀运算符,例如:_ *来展开序列).

我发现许多操作符(“Scala”编程指南中的2?页)和编译器调整混乱.公平地说,许多运算符是从C等人借来的常规算术/布尔运算符.

我被告知,支持这一点有一些基本的句法规则,我认为,如果我知道这将会减少我的认知负担.

有没有一些规则(如果是这样的话),或者我注定要学习图书馆中许多“运算符”的方法和含义?

解决方法

有两种方法可以了解您对运算符的问题:

> Scala编译器如何处理操作符的规则是什么? (语言规则)
>管理员在图书馆中定义的规则是什么? (运算符定义)

语言规则

确实有规则.我会让你确定你是否认为“少数”他们.作为大多数Scala,您可以在Language Reference第6.12节中找到它们.

最重要的位:

>唯一接受的前缀运算符是 –,!和?.
>任何不需要参数的方法都可以用作后缀运算符.
>任何接受一个参数的方法都可以用作中缀运算符.然而,这些操作的优先级受制于具体规则,大概是以算术和其他表达方式为待处理.优先级由运算符/方法名称的第一个字符确定,并且与C或Java所期望的匹配.
>所有中缀运算符都是左关联的,除了以:结尾的那些.典型的例子包括::和:.

所以四条规则,基本上是.我鼓励你阅读规范更多的洞察力.

运算符定义

运算符定义的选择取决于库设计者.例如,Scala集合库使用相对较小且一致的运算符集(,–,**,=,– =,…等).解析器组合器带有更异国情调的集合,一些图书馆可以完全不可穿透,因为它们的定制操作符定义(sbt或Lift,但这只是我个人的意见).

这被认为是潜在问题的根源,Scala风格指南有this说明符号方法名称(自定义运算符):

Avoid! Despite the degree to which Scala facilitates this area of API design,the definition of methods with symbolic names should not be undertaken lightly,particularly when the symbols itself are non-standard (for example,>>#>>). As a general rule,symbolic method names have two valid use-cases:

  • Domain-specific languages (e.g. actor1 ! Msg)
  • Logically mathematical operations (e.g. a + b or c :: d)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读