问题标签 [scala-generics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 在没有方括号的scala中声明一个泛型类
阅读本文时,我想到了以下语法:
作者说:
另外,请不要这
Slave HasPrivilege Read
只是另一种表示法HasPrivilege[Slave, Read]
将示例保留在基本 scala 中,示例也可以是
我正在寻找一些可以解释这种语法但找不到的文档/文章。有人可以指出允许这种语法的语言功能吗?
scala - 具有scala泛型/类型成员的Json4s替代api
我知道有一个类似 api 的 xpath 可以从 Json4s 中的 JObject 中获取字段
但是感觉有点麻烦,我不喜欢 api 之类的符号。我有点想要这样的东西:
并像这样使用它
但是它不能编译,T 的上限是一个 JValue,所以 Id 希望能够引用所有 JValue 上的类型成员 Values。作为参考,他是 JValue 的狙击手:
我是 scala 的新手,我怎样才能让编译器满意?
scala - 访问泛型参数scala的类型参数
我正在尝试对 Akka 流中的以下函数进行包装。
其中 s 是我用后退包装的一些来源。理想情况下 id 像这样
我设法创建了这个:
问题是我需要在呼叫站点再次提供所有 3 种类型的流参数,这看起来很可怕
它也不是类型安全的,因为我可以在这里输入任何类型参数。
我觉得应该是可能的,但我不确定如何不采用额外的类型参数 In 和 Out,而是执行 T#In、T#Out 等操作,因为我说过 T 扩展了流程,因此,T已经有了我需要的类型参数。
scala - 如何从泛型方法返回原始集合类型
我有一个通用方法,它应该返回与输入相同类型的集合:
但是这段代码无法编译:
错误:(34, 15) 类型不匹配;找到:需要 Seq[A]:C s.take(n) ++ s.drop(n + 1)
C
当明确代表时,这怎么可能Seq[A]
?这是否意味着这种连接总是返回父类型的实例Seq[A]
,而不是子类型C
?可以重写我的代码以生成类型的集合C
吗?- 这是定义返回相同集合类型(在我的情况下是 的子类型
Seq
)作为一般输入的通用方法的正确方法吗?
斯卡拉 2.12.4
scala - Scala 类型检查的奇怪失败
我的应用程序需要一个可以添加到 any的参数提供程序 ,以允许传递任意数量的任何类型的参数。trait
class
然后我可以从使用它们中提取NamedArg
s如下args
ArgsProvider
key
尽管它看起来非常不直观和冗长,但这种设计对我来说完美无缺。然而,在写某某的时候unit tests
,我最近发现了其中的一个重大漏洞:执行失败type-checking
。(或者至少这是我推断的)
更具体地说,当我尝试将提供的类型设置为错误类型时,它不会引发任何异常。例如:type-cast
arg
虽然人们会期望上面的代码throw
是Exception
; 令我沮丧的是,它运行良好并返回以下输出(on Scala
REPL
)
optLong: Option[Long] = Some(value-string-arg)
我的问题是:
- 为什么类型检查在这里失败?
- 一般来说,Scala 的类型检查在什么情况下会失败?
- 这个设计可以改进吗?
我正在使用
Scala 2.11.11
SBT 1.0.3
scala - Scala 编译器在方法级别抱怨泛型参数的类型不匹配
为什么 Scala 编译器无法编译下一个代码:
编译器说:
但是,不是吗SomeProfile
?T
更新:
我想用确切的类型实现这个特征DatabaseConfigProvider并以这种方式进行:
看起来很丑,因为asInstanceOf
.
scala - Scala:如何强制提供类型
假设我们有以下特征和类定义
给出上面我可以创建 X 的实例如下。
编译器不会抱怨。在这种情况下推断的类型是Nothing
. 我想知道如何在编译时防止这种情况发生,以便在不提供显式类型的情况下不允许创建 X 的实例,即是Model
?
scala - 如何将`String`作为`Iterable[E]`
我正在使用 Scala 的implicit class
机制,但无法java.lang.String
识别为Iterable[A]
.
仅通过上述定义,IntelliJ 和 SBT 声明......
错误:(31, 8) value splitOn is not a member of String 可能的原因:可能在 `value splitOn' 之前缺少分号?.splitOn(s => Character.isWhitespace(s.head))
...当我尝试这个...
java - 任何类型的 Scala classNotFound
我正在尝试在我的 HashMap 中创建一个通用值类型,如下所示:
这在我的 spark-shell 中有效,但它在我的 IntelliJ 项目中的 scala.Any 上给了我这个 ClassNotFoundException:
我正在使用 Scala 2.11。有什么想法可能导致这种情况吗?
scala - Scala - 访问参数化类的类型
想象一下,我有一个可以容纳某种动物的盒子。
可以给这个盒子提供原始数据,这些数据应该被转换/序列化成与盒子里已经存在的动物相同类型的动物。
换句话说,如果给一盒狗一些“数据”,我想验证“数据”是另一只狗。
通常,当我想针对特定动物验证“rawData”时,我会这样做(例如狗):
但是,我不知道 Box[T] 拥有哪种类型的 Animal。
如果我让它保持原样:
我收到一个编译错误,说我没有 T 类型的隐式(即使很难,我也拥有 Animal 的子特征的所有可能的隐式)。
看来我无法告诉编译器,我想根据当前 Box 包含的 Animal 类型验证数据。
- 为什么会这样?
- 可以解决吗?如何解决?