小编Dan*_*ain的帖子

具有Mixin特征的Scala案例类

我试图将一个特征用作一个案例类的混合.

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风格.

scala

16
推荐指数
1
解决办法
2409
查看次数

Scala通过名称混淆呼叫

我正在使用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)

scala

6
推荐指数
1
解决办法
6010
查看次数

Scala参数化方法和算术运算

我试图获得一个简单的功能,我有一个列表列表,我想对数据( - ,+,*,/)做一些数学运算.我希望该方法采用以下任何类型(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
推荐指数
1
解决办法
940
查看次数

标签 统计

scala ×3