有人试验像芝麻这样的RDF存储解决方案吗?与传统的数据库解决方案相比,我正在寻找这种解决方案的性能评估.
假设我想编写一个case类Stepper,如下所示:
case class Stepper(step: Int) {def apply(x: Int) = x + step}
它带有一个很好的toString实现:
scala> Stepper(42).toString
res0: String = Stepper(42)
但它不是真正的功能:
scala> Some(2) map Stepper(2)
<console>:10: error: type mismatch;
 found   : Stepper
 required: Int => ?
              Some(2) map Stepper(2)
解决方法是实现Function特性......
case class Stepper(step: Int) extends (Int => Int) {def apply(x: Int) = x + step}
但是,我不能再免费获得一个很好的toString实现了:
scala> Stepper(42).toString
res2: java.lang.String = <function1>
然后,问题是:我可以充分利用这两个世界吗?有没有一个解决方案,我有漂亮的toString自由执行和特点的实现Function.换句话说,有没有办法以最终应用case class语法糖的方式应用线性化?
我不熟悉scala XML库.有没有一种简单的方法来查找文档的DTD?从我到目前为止看到的,scala.xml.XML.load只返回Elem(文档的XML内容),但不是它的DTD.有没有其他方法专门做到这一点?
额外的问题:文档开头的XML声明的相同问题.
我刚刚参加了暑期学校的斯卡拉讲座.讲师得到了以下问题:
- "有没有办法让编译器判断一个类是不可变的?"
讲师回答说
- "不,没有.如果可能的话会非常好. "
我很惊讶.不仅仅是检查该类是否包含任何var-members?
我试图理解多个参数子句的这种语言特性以及为什么要使用它.例如,这两个功能之间的区别是什么?
class WTF {
    def TwoParamClauses(x : Int)(y: Int) = x + y
    def OneParamClause(x: Int, y : Int) = x + y
}
>> val underTest = new WTF
>> underTest.TwoParamClauses(1)(1) // result is '2'
>> underTest.OneParamClause(1,1) // result is '2' 
在第4.6点的Scala规范中有一些内容.看看这对你有意义.
注意:规范称这些'参数子句',但我认为有些人也可能称之为'参数列表'.
根据scala规范,由case类构建的提取器如下(scala规范§5.3.2):
def unapply[tps](x: c[tps]) =
  if (x eq null) scala.None
  else scala.Some(x.xs11, ..., x.xs1k)
出于实现原因,我希望能够在非案例类上模仿此提取器的行为.但是,我的实现无法重现相同的行为.
以下是我的差异示例:
trait A
sealed trait B[X <: A]{ val x: X }
case class C[X <: A](x: X) extends B[X]
class D[X <: A](val x: X) extends B[X]
object D {
  def unapply[X <: A](d: D[X]): Option[X] =
    if (d eq None) None
    else Some(d.x)
}
def ext[X <: A](b: B[X]) = b match {
  case C(x) => Some(x)
  case D(x) => Some(x)
  case _ …假设我使用case类构建了一些树,类似于:
abstract class Tree
case class Branch(b1:Tree,b2:Tree, value:Int) extends Tree
case class Leaf(value:Int) extends Tree
var tree = Branch(Branch(Leaf(1),Leaf(2),3),Branch(Leaf(4), Leaf(5),6))
现在我想构建一个方法来将具有一些id的节点更改为另一个节点.很容易找到这个节点,但我不知道如何改变它.有没有简单的方法呢?
我想玩scala.ref.WeakReference.但是,在尝试实现大事之前,我想尝试检查scala控制台中的行为.我尝试了一些但我无法获得被取消引用的对象.这是我的尝试之一:
> class A
defined class A
> class B(var value: A)
defined class B
> new B(new A)
res0: B = B@c8aeb3
> new scala.ref.WeakReference(res0.value)
res1: scala.ref.WeakReference[A] = scala.ref.WeakReferenceWithWrapper@16a5d72
> res0.value = new A
> res1.get // Here I hope to get None
res3: Option[A] = Some(A@135707c)
另一个尝试是由下面的oxbow_lakes给出的.
我也尝试过徒劳地显式运行垃圾收集器(调用java.lang.System.gc).
有没有办法取消引用的内容res1?
我需要将Generic类型定义为实现接口的子类,如下所示(DOES NOT COMPILE):
public class Foo<T extends SomeClass implements SomeInterface> {
    ...
}
可以这样做吗?
Jon Skeet,我们需要你的时候你在哪里;)