我试图将一个特征用作一个案例类的混合.
case class Team(name:String)
trait WinStreak{}
Run Code Online (Sandbox Code Playgroud)
我想像这样使用它:
val team = Team("name") with WinStreak
Run Code Online (Sandbox Code Playgroud)
显然我不能这样做.这是因为案例类使用伴侣对象来创建类的实例吗?我知道另一个解决方案是在我的类def中扩展特性,但我想知道是否有可能创建它的mixin风格.
我正在使用REPL通过名称示例进行一些调用,并在Eclipse中运行相同的示例.
以下是Eclipse中的内容:
场景1:
val funct = {println("Calling funct")}
takesFunct(funct)
def takesFunct(f: => Unit)
{
val b = f
}
Run Code Online (Sandbox Code Playgroud)
输出是:调用函数
场景2:
方法takeFunct保持不变
takesFunct({println("Calling funct")}
Run Code Online (Sandbox Code Playgroud)
输出是:
调用本功能
调用本功能
Scala REPL场景1:
scala> def takesFunct(f: => Unit)
{
val b = f
}
takesFunct: (f: => Unit)Unit
scala> val funct = {println("Calling funct")}
Calling funct
funct: Unit = ()
scala> takesFunct(funct)
// No Output
Run Code Online (Sandbox Code Playgroud)
场景2与上面定义的方法相同
scala> takesFunct({println("Calling funct")}
Calling funct
Run Code Online (Sandbox Code Playgroud)
两个问题
1)为什么Eclipse的输出与REPL不同?
2)传球有什么区别
val funct = {...}
takesFunct(funct)
Run Code Online (Sandbox Code Playgroud)
而不是
takesFunct({...})
Run Code Online (Sandbox Code Playgroud) 我试图获得一个简单的功能,我有一个列表列表,我想对数据( - ,+,*,/)做一些数学运算.我希望该方法采用以下任何类型(Int,Float,Double).
这是我尝试过的:
def doSomething[T](data: List[T]){
data reduceLeft(_ / _)
}
Run Code Online (Sandbox Code Playgroud)
显示以下内容:value /不是类型参数T的成员.
如何让它适用于AnyVal类型(Double,Int,Float)?
更新我尝试在以下代码中实现建议:
def dot[T](l: List[List[T]])(implicit num: Numeric[T]) =
{
for (row <- data)
yield for(col <- l)
yield row zip col map {a => num.times(a._1 , a._2)} reduceLeft (_+_)
Run Code Online (Sandbox Code Playgroud)
并得到错误:类型不匹配; 发现:a._1.type(底层类型为T)需要:T
有没有办法解决这个问题?
scala ×3