我最近一直在学习Python,并且对其出色的运行时元编程功能感到惊讶.以前我遇到过"运行时元编程"这个术语,当时我正在阅读关于Smalltalk的内容,据我所知,Smalltalk拥有最佳的运行时元编程功能.Python与Smalltalk和元编程相比有多好?两种语言采用的方法之间有什么显着差异?
如何配置的想法自动替换=>用?和->用??
为什么课堂上没有跟随签名的方法PartialFunction[A, B]?
def orElse[A1 <: A, B1 >: B](that: A1 => B1): A1 => B1
Run Code Online (Sandbox Code Playgroud)
缺少这种方法背后有一些合乎逻辑的原因,还是仅仅是疏忽?
Scalaz提供了一个名为方法fold关于各种ADT的如Boolean,Option[_],Validation[_, _],Either[_, _]等.该方法基本上发生在对应于所有可能的情况该给定ADT的功能.换句话说,模式匹配如下所示:
x match {
case Case1(a, b, c) => f(a, b, c)
case Case2(a, b) => g(a, b)
.
.
case CaseN => z
}
Run Code Online (Sandbox Code Playgroud)
相当于:
x.fold(f, g, ..., z)
Run Code Online (Sandbox Code Playgroud)
一些例子:
scala> (9 == 8).fold("foo", "bar")
res0: java.lang.String = bar
scala> 5.some.fold(2 *, 2)
res1: Int = 10
scala> 5.left[String].fold(2 +, "[" +)
res2: Any = 7
scala> 5.fail[String].fold(2 +, "[" +)
res6: Any = 7
Run Code Online (Sandbox Code Playgroud)
同时,对于Traversable[_] …
functional-programming scala category-theory scalaz catamorphism
我刚刚发现这个网页比较了一些用Scala,C#和Go编写的代码.我很惊讶看到Scala和Go代码看起来有多接近,比Scala代码与C#代码相比要多得多.
所以我的问题是:Scala和Go之间最重要的区别是什么?
我需要构建一个从外部资源加载的对象序列.这种负载是昂贵的操作需要延迟到需要对象的时间.构建集合后,我需要对包含的对象进行索引访问.Scala标准库是否提供适合此用例的集合?如果没有,实施它的最佳方式是什么?
编辑:
索引查找最好是O(1)操作.
由于显而易见的原因,以下内容不起作用.
(defprotocol Monoid
(mappend [a b])
(mzero []))
Run Code Online (Sandbox Code Playgroud)
mzero零参数,协议中不允许(或没有意义)零参数方法.在Haskell或Scala中,调度是基于类型而不是基于值的,这不是问题.
Monoid在Clojure中概念化和编写协议的正确方法是什么?
有一些stdlib函数会在无效输入上抛出错误.例如:
Prelude> read "1o2" :: Int
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)
我想把它包起来Either e a代替.我怎样才能做到这一点?
在Play中,我可以启动交互式控制台,然后在其中启动应用程序,如下所示:
[app] $ console
scala> new play.core.StaticApplication(new java.io.File("."))
Run Code Online (Sandbox Code Playgroud)
同样可以放入已经运行的Play应用程序的交互式控制台吗?在野外是否有SBT任务可以做到这一点?