我认为PartialFunction可以是Monoid.我的思维过程是否正确?例如,
import scalaz._
import scala.{PartialFunction => -->}
implicit def partialFunctionSemigroup[A,B]:Semigroup[A-->B] = new Semigroup[A-->B]{
def append(s1: A-->B, s2: => A-->B): A-->B = s1.orElse(s2)
}
implicit def partialFunctionZero[A,B]:Zero[A-->B] = new Zero[A-->B]{
val zero = new (A-->B){
def isDefinedAt(a:A) = false
def apply(a:A) = sys.error("error")
}
}
Run Code Online (Sandbox Code Playgroud)
但目前的版本Scalaz(6.0.4)不包括在内.没有包含某些东西的原因是什么?
ScalaSignature是一个注释.它包含元信息.
然后提供解析器.但scala-library.jar不包含解析器.它似乎是秘密的API.
但我知道一些使用ScalaSignature的库.
顺便说一句,我找不到ScalaSignature的正式规范.我担心ScalaSignature的规范可能会因Scala版本更改而改变.此外,我认为使用ScalaSignature还存在一些其他风险,因为规范不存在.
此外,Scala2.10将提供新的反射API.我认为当2.10发布时,使用ScalaSignature的原因会减少.
因此,如果使用ScalaSignature?
我注意到执行以下代码时发生了AbstractMethodError.
package javapkg;
public abstract class JavaClass{
abstract String foo(int b);
public String bar(int b){
return foo(b);
}
}
Run Code Online (Sandbox Code Playgroud)
package scalapkg
import javapkg._
class ScalaClass extends JavaClass{
def foo(a:Int) = a.toString
}
object Main extends App{
println(new ScalaClass().bar(10))
}
Run Code Online (Sandbox Code Playgroud)
[error] (run-main) java.lang.AbstractMethodError: javapkg.JavaClass.foo(I)Ljava/lang/String;
java.lang.AbstractMethodError: javapkg.JavaClass.foo(I)Ljava/lang/String;
at javapkg.JavaClass.bar(JavaClass.java:7)
at scalapkg.Main$delayedInit$body.apply(ScalaClass.scala:10)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:76)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30)
at scala.App$class.main(App.scala:60)
at scalapkg.Main$.main(ScalaClass.scala:9)
at scalapkg.Main.main(ScalaClass.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
java.lang.RuntimeException: Nonzero …Run Code Online (Sandbox Code Playgroud) 我在Scala 2.10.0和2.9.2上编写了编译时间的基准,发现2.10.0的编译时间比2.9.2长.
在哪种情况下会发生?或者Scala 2.10.0编译器出于某些原因通常会慢于2.9.2吗?
在Scala2.10.0 REPL中
Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_13).
Type in expressions to have them evaluated.
Type :help for more information.
scala> case class A private(i:Int)
defined class A
scala> A(1)
res0: A = A(1)
Run Code Online (Sandbox Code Playgroud)
但如果编译
$ scala -version
Scala code runner version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL
$ cat Main.scala
package foo
case class A private (i:Int)
object Main extends App{
println(A(1))
}
$ scalac Main.scala
Main.scala:6: error: constructor A in class A cannot …Run Code Online (Sandbox Code Playgroud) Java代码
package lambda_cache_example_java;
interface Semigroup1<A> {
public A append(A a1, A a2);
}
interface Semigroup2<A> {
public A append(A a1, A a2);
public interface Foo{}
public class Bar{}
}
class Main {
static Semigroup1<Integer> intSemigroup1() {
return (a1, a2) -> a1 + a2;
}
static Semigroup2<Integer> intSemigroup2() {
return (a1, a2) -> a1 + a2;
}
public static void main(String[] args) {
Semigroup1<Integer> x1 = intSemigroup1();
Semigroup1<Integer> x2 = intSemigroup1();
System.out.println(x1);
System.out.println(x2);
System.out.println(x1 == x2); // same instance
Semigroup2<Integer> y1 …Run Code Online (Sandbox Code Playgroud) 为什么scala Tuple productIterator返回类型Iterator [Any]?
例如,如果Tuple3或Product3是 productIterator,则定义如下
def productIterator[T1<:X,T2<:X,T3<:X,X] = Iterator(_1,_2,_3)
Run Code Online (Sandbox Code Playgroud)
以下Expression可以返回Iterator [java.lang.Number]
(BigInt(1),new java.lang.Long(2),new java.lang.Float(3)).productIterator
Run Code Online (Sandbox Code Playgroud)
但目前的scala版本(2.9.1)并非如此.有什么理由吗?
scala ×7
jvm ×2
.class-file ×1
annotations ×1
case-class ×1
constructor ×1
java ×1
java-8 ×1
lambda ×1
monoids ×1
overriding ×1
performance ×1
reflection ×1
scala-2.10 ×1
scala-2.9 ×1
scalaz ×1
tuples ×1