在Scala中,final声明一个成员不能在子类中重写。例如: class Parent {
val a = 1
final val b = 2
}
class Subclass extends Parent {
override val a = 3 // this line will compile
override val b = 4 // this line will not compile
}
... 展开详请
可以定义: implicit def idToSideEffect[A](a: A) = new {
def withSideEffect(fun: A => Unit): A = { fun(a); a }
def |!>(fun: A => Unit): A = withSideEffect(fun) // forward pipe-like
def tap(fun: A => Unit): A = withSideEffect(fun) // public demand & ruby standard
} 然后: calcSomeResult() |!> { rs => logger.info("result is:" + rs) }
calcSomeResult() tap println... 展开详请
作为Daniel和0__的杰出答案的补充,我不得不说,Scala理解一些符号的Unicode类似物,所以不是
for (n <- 1 to 10) n % 2 match {
case 0 => println("even")
case 1 => println("odd")
}
人们可以写
for (n ← 1 to 10) n % 2 match {
case 0 ? println("even")
case 1 ? println("odd")
}... 展开详请
A class是一个定义,一个描述。它用其他类型的方法和组合来定义类型。
一个object是单身人士 - 一个保证独一无二的班级实例。对于object代码中的每一个,都会创建一个匿名类,它从您声明object要实现的任何类继承。这个类不能从Scala源代码中看到 - 尽管你可以通过反射来获得它。
object和之间有关系class。如果一个对象拥有相同的名字,则称它为类的伴侣对象。发生这种情况时,每个人都可以访问private另一方面的可见性方法。虽然这些方法不会自动导入。您必须显式导入它们,或者以类/对象名称作为前缀。
例如:
class X {
// class X can see private members of object X
// Prefix to call
def m(x: Int) = X.f(x)
// Import and use
import X._
def n(x: Int) = f(x)
private def o = 2
}
object X {
private def f(x: Int) = x * x
// object X can see private members of class X
def g(x: X) = {
import x._
x.o * o // fully specified and imported
}
}... 展开详请