小编Ken*_*ida的帖子

Scala PartialFunction可以是Monoid吗?

我认为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)不包括在内.没有包含某些东西的原因是什么?

functional-programming scala partialfunction scalaz monoids

14
推荐指数
1
解决办法
1439
查看次数

我们应该直接使用ScalaSignature吗?

ScalaSignature是一个注释.它包含元信息.

然后提供解析器.但scala-library.jar不包含解析器.它似乎是秘密的API.

但我知道一些使用ScalaSignature的库.

顺便说一句,我找不到ScalaSignature的正式规范.我担心ScalaSignature的规范可能会因Scala版本更改而改变.此外,我认为使用ScalaSignature还存在一些其他风险,因为规范不存在.

此外,Scala2.10将提供新的反射API.我认为当2.10发布时,使用ScalaSignature的原因会减少.

因此,如果使用ScalaSignature?

reflection jvm annotations scala .class-file

10
推荐指数
1
解决办法
720
查看次数

包私有方法覆盖时发生AbstractMethodError

我注意到执行以下代码时发生了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)

java overriding scala runtime-error

7
推荐指数
1
解决办法
3627
查看次数

在哪种情况下Scala 2.10.0编译器可以比2.9.2更快或更慢?

我在Scala 2.10.0和2.9.2上编写了编译时间的基准,发现2.10.0的编译时间比2.9.2长.

在哪种情况下会发生?或者Scala 2.10.0编译器出于某些原因通常会慢于2.9.2吗?

performance scala scala-2.9 scala-2.10

7
推荐指数
1
解决办法
793
查看次数

scala case类私有应用方法(repl bug?)

在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)

constructor scala case-class read-eval-print-loop

7
推荐指数
1
解决办法
1002
查看次数

为什么Java8和Scala2.12 lambda缓存有区别?

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)

lambda jvm scala invokedynamic java-8

7
推荐指数
1
解决办法
396
查看次数

为什么productIterator返回类型Iterator [Any]?

为什么scala Tuple productIterator返回类型Iterator [Any]?

例如,如果Tuple3Product3是 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 tuples

5
推荐指数
1
解决办法
1185
查看次数