`
nj0308
  • 浏览: 4485 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用过程发现的Scala的一些缺陷

阅读更多
   本人在自学使用Scala的过程中,发现此语言还是有一些缺陷,或者更确切的说有一些个人感觉还可以优化的地方(当然不排除初学者对该语言理解不够的地方)。

    1、函数不支持变长参数。当然排除掉先定义全参数函数,然后定义缺少某些参数的函数通过缺省值指向全参数函数的情况。这儿的变参应该是指不指定最长参数个数的情况。当然,一般来说必须使用变参的情况还是不多,而且绝大多少都可以通过包含Collection类型(及其子类)的参数来变通实现,只是与Ruby比较显得啰嗦。

   2、作为支持函数式编程的语言,本人觉得应该有缓存函数值的机制。当然前提是有区分有副作用函数和无副作用函数的机制(就像可变变量与不可变变量的var和val一样)。对无副作用的纯函数应该从语言机制上支持弱缓存(比如通过scala.Collection.jcl的WeakHashMap的弱映射机制)。

    由于初学初用,先记下这些使用中的感受,在进一步的使用过程中再不断补充。一者抛砖引玉,看看各位有什么高见;二者对那些是否要学习Scala语言的同志提供反面的参考(目前网上的资料对其的评论都基本上是正面意见——至少中文资料如此)。

   
    
0
0
分享到:
评论
2 楼 nj0308 2009-09-17  
23号 写道
变长参数是不是这个:

scala> def echo(args: String*) =
         for (arg <- args) println(arg)
echo: (String*)Unit
scala> echo()
scala> echo("one")
one
scala> echo("hello", "world!")
hello
world!
scala> val arr = Array("What's", "up", "doc?")
arr: Array[java.lang.String] = Array(What's, up, doc?)
scala> echo(arr: _*)
What's
up
doc?

2. 闭包啊。


对于变参,看来是我对语言理解不够的原因。

对于第二点,是什么意思啊,不明白。
1 楼 23号 2009-09-16  
变长参数是不是这个:

scala> def echo(args: String*) =
         for (arg <- args) println(arg)
echo: (String*)Unit
scala> echo()
scala> echo("one")
one
scala> echo("hello", "world!")
hello
world!
scala> val arr = Array("What's", "up", "doc?")
arr: Array[java.lang.String] = Array(What's, up, doc?)
scala> echo(arr: _*)
What's
up
doc?

2. 闭包啊。

相关推荐

    beginners-guide-to-scala.pdf

    对于专业知识,凡不明白的,我都想一探到底, 但由于自身的知识缺陷太大,很多东西到最后都无法坚持下来,很容易产生挫败感。 遂借此机会,试图克服这一缺点。 目前已经花了整整一个月的时间去翻译和校对,基本...

    sonar-scala:一个免费的开源SonarQube插件,用于Scala项目的静态代码分析

    这个插件的主要目标是帮助开发者发现潜在的代码缺陷、风格问题以及代码复杂性问题,从而提升Scala代码的质量和一致性。 **主要特性** 1. **静态代码分析**:SonarScala插件执行一系列规则检查,这些规则涵盖了...

    scala-dev:Scala 2团队问题。 不适用于用户可见的错误或直接可操作的用户可见的改进。 用于buildtestinfra以及长期计划和想法跟踪。 我们的错误跟踪器位于https://github.comscalabugissues

    这里我们主要讨论Scala 2的开发过程、错误跟踪系统以及相关标签的含义。 首先,Scala 2是Scala语言的一个主要版本,它引入了许多新特性和优化,以提高开发者的效率和代码质量。在这个过程中,开发团队可能会遇到...

    scalacheck:Scala的基于属性的测试

    **ScalaCheck:深入理解基于属性的测试框架** ScalaCheck是一个流行的开源测试库,专为Scala编程语言...通过学习和熟练使用ScalaCheck,开发者可以提高代码质量,减少因边界条件错误或未预见输入而导致的软件缺陷。

    chisel-getting-started-chinese

    目前Chisel仍处于早期发展阶段,在使用过程中可能会遇到实现上的缺陷或设计上的不足。但随着项目的不断发展,这些问题正在逐步得到解决。开发团队鼓励用户提交缺陷报告和改进建议,共同推动Chisel的进步。 #### ...

    construction-test

    8. **性能测试**:对于一些性能敏感的系统,"construction-test"可能包含性能测试,使用Scala配合像是JMH(Java Microbenchmark Harness)这样的工具来测量和优化代码性能。 总的来说,"construction-test"项目是一...

    sonarqube jenkins svn maven代码质量检查.pdf

    2. 潜在的缺陷:使用同样的规则检测工具来识别潜在的代码缺陷,帮助开发者早期发现问题。 3. 糟糕的复杂度分布:SonarQube分析代码的复杂度分布,如过高的文件、类或方法复杂度可能会导致维护困难。 4. 重复代码:...

    软件测试过程中的性能与负载测试.pptx

    - 发现潜在的软件缺陷,如功能错误、性能问题等。 - 通过不断测试和优化,提高软件的质量和稳定性,减少可能出现的问题。 - 降低后期维护成本。 - 提升用户体验和满意度。 - **分类**: - **功能测试**:验证...

    软件测试常用工具

    - Gatling:Gatling 是一个高性能的负载测试工具,尤其适合现代 Web 应用的性能测试,使用 Scala 编写,提供了丰富的报告和分析功能。 3. 接口测试工具: - Postman:Postman 是一个流行的 API 开发和测试工具,...

    实用文档之软件开发应知应会-84分.pdf

    - 问题:“对于缺陷管理工具,BugFree 相比 Bugzilla()更强一些。”答案是B.易用性。 25. 分布式存储分类:分布式存储通常分为对象存储、块存储和文件存储。 - 问题:“分布式存储可以分为哪几类?”答案是B.对象...

    sommatlab代码-Test_Exam_notes:Test_Exam_notes

    它会发现常见的编程缺陷,例如未使用的变量,空的catch块,不必要的对象创建等等。 它支持Java,JavaScript,Salesforce.com Apex和Visualforce,PLSQL,Apache Velocity,XML,XSL。 此外,它还包括CPD(复制粘贴...

    软件开发应知应会-84分.pdf

    14. Scala语言特点:Scala是面向对象和函数式的编程语言,具有可扩展性,并且是静态类型的。选项ABC正确。 15. MyBatis:MyBatis是一个开源的对象关系映射框架。选项A正确。 16. Web主要功能:Web的主要功能是使...

    MongoDB及Spark在金融保险行业技术实践.pptx

    传统方法如使用触发器和存储过程在处理这类问题时存在延迟大、性能受限以及缺乏水平扩展性的缺陷。为了解决这些问题,引入了MongoDB和Spark的解决方案。 MongoDB是一种强大的NoSQL数据库,尤其适合处理大量非结构化...

    Spark处理数据排序问题如何避免OOM

    在上述示例中,虽然具体的实现细节被省略,但基本思路是通过使用`TreeSet`等数据结构来优化排序过程,从而降低内存消耗,避免OOM的发生。 #### 总结 在处理大规模数据排序时,开发者应当充分考虑Spark的特性以及...

    软件开发应知应会-.docx

    在SQL中,删除数据库使用`DROP DATABASE`关键字,删除表中的记录使用`DELETE`关键字,选项D和C分别对应这两个操作。 面向对象语言的三大特性是封装、继承和多态,选项A、B、C正确。扩展通常不是面向对象的固有特性...

    2021年软件开发应知应会-84分之欧阳学文创编.pdf

    14. Scala语言特点:Scala是面向对象和函数式的,同时具有可扩展性和静态类型。 15. MyBatis:MyBatis是一个开源的对象关系映射框架,简化了数据库操作。 16. Web主要功能:Web服务器返回信息,同时处理客户端的...

    软件开发应知应会-84分.docx

    14. **Scala语言特点** - Scala是面向对象的、函数式的编程语言,同时是可扩展的,且是静态类型的。 15. **MyBatis** - MyBatis是一个开源的对象关系映射框架,允许开发者将SQL语句与Java代码分离。 16. **Web功能...

    软件工程与软件可扩展性评估.pptx

    - **提升开发效率**:通过标准化的过程和工具,加速软件开发周期。 - **降低成本**:通过有效的项目管理和资源利用,减少不必要的开支。 **软件工程的重要性**: - 在信息化时代,软件的质量直接影响着人们的生活和...

Global site tag (gtag.js) - Google Analytics