相关疑难解决方法(0)

什么是Scala上下文和视图边界?

简单来说,什么是上下文和视图边界,它们之间有什么区别?

一些易于理解的例子也很棒!

scala implicits

261
推荐指数
1
解决办法
3万
查看次数

如何为所有数字类型创建一个通用类?

我正在尝试创建一个对所有数字类型通用的Vector类.我最初的尝试是为所有类型编写一个类,如下所示:

class Vector3f(val x:Float, val y:Float, val z:Float)
Run Code Online (Sandbox Code Playgroud)

因为scala支持专门的注释,所以我可以使用它来为所有数字类型生成这些类

class Vector3[A <: What?](val x:A,val y:A, val z:A)
Run Code Online (Sandbox Code Playgroud)

但我发现作为数字的超级类型的所有东西都是AnyVal,但AnyVal不支持+ - */.那么正确的方法是什么,但不牺牲未装箱数字类型的性能?

polymorphism scala type-parameter

24
推荐指数
3
解决办法
1万
查看次数

如何获取与上下文绑定关联的类型类的实例?

注意:我正在提出这个问题来自己回答,但欢迎其他答案.

请考虑以下简单方法:

def add[T](x: T, y: T)(implicit num: Numeric[T]) = num.plus(x,y)
Run Code Online (Sandbox Code Playgroud)

我可以使用如下的上下文绑定重写它

def add[T: Numeric](x: T, y: T) = ??.plus(x,y) 
Run Code Online (Sandbox Code Playgroud)

但是如何获取该Numeric[T]类型的实例以便我可以调用该plus方法?

scala typeclass context-bound

15
推荐指数
2
解决办法
2073
查看次数

Scala键入:如何确保数字类型

我在Scala中遇到了一个小问题.在Haskell中,我可以这样做:

add :: (Num a) => (a,a) -> (a,a) -> (a,a)
Run Code Online (Sandbox Code Playgroud)

这样,我可以投入add任何类型的数字和支持+等.我希望Scala类相同,如下所示:

case class NumPair[A <: Numeric](x: A, y: A)
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.但是由于Scala Docs,它Numeric[T]是允许这些操作的唯一特征,并且似乎被扩展Int,Float等等.

有小费吗?

types functional-programming scala

8
推荐指数
1
解决办法
1925
查看次数