ruby - Scala 缺少哪些动态语言(如 Ruby 或 Clojure)的特性?

标签 ruby scala clojure language-features dynamic-languages

当您选择 Scala(或 F#、Haskell、C#)等静态类型语言而不是 Ruby、Python、Clojure、Groovy(具有宏或运行时元编程功能)等动态类型语言时,您在实践中失去了什么)?请考虑最好的静态类型语言和最好的(在您看来)动态类型的语言,而不是最差的。

答案总结:

恕我直言,Ruby 等动态语言相对于 Scala 等静态类型语言的主要优势是:

  • 快速的编辑-运行周期(JavaRebel 是否缩小了差距?)
  • 目前 Scala/Lift 社区比 Ruby/Rails 或 Python/Django 小得多
  • 可以修改类型定义(尽管动机或需要不是很清楚)

最佳答案

原则上,当不清楚(在静态上下文中)正确的做法是什么时,您将放弃忽略正在使用的类型的能力,仅此而已。

由于复杂的类型检查可能相当耗时,您也可能被迫放弃快速的在线元编程。

在实践中,使用 Scala,您几乎不会放弃任何其他东西,也不会放弃任何我特别关心的东西。您不能注入(inject)新方法,但可以编译和运行新代码。您必须在函数参数中指定类型(以及递归函数的返回类型),如果您自己从不犯类型错误,这会有点烦人。由于它会编译每个命令,因此 Scala REPL 不像例如Python 外壳。而且由于它使用 Java 反射机制,因此您无法像使用例如Python(无论如何都需要构建自己的检查库)。

关于ruby - Scala 缺少哪些动态语言(如 Ruby 或 Clojure)的特性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2566569/

相关文章:

ruby - 转储 JSON 对象的首选方法是什么? to_json、JSON.generate 还是 JSON.dump?

ruby-on-rails - 如果评估的最后一个语句是 If 语句,Ruby 会返回什么

scala - Scala中函数之间的&符号是什么意思

url - 如何在 Clojure 中下载带有 URL 查询的网页?

clojure - 如何遍历从 Clojure 中的生产者函数生成的树?

clojure - 将 Clojure 代码序列化和反序列化为 EDN

ruby-on-rails - 有没有办法在 Ruby on Rails 的控制台中检查命令的性能?

ruby - 如何在 IRB 中获取仅我可用的方法的列表?

scala - 类的实例与其伴生对象之间的关系

scala - map <字符串,列表<?在 Scala 中扩展 T>>