问题标签 [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 泛型
我已经定义了这些类。
这不会编译。它给出错误“必需的 T,但发现 PostResult(或 PostError)”。
scala - 如何“提取”类型参数以实例化另一个类
以下 Scala 代码有效:
我的问题是我想像这样实例化ReducerComponent
:
甚至更好:
这意味着很多事情:
- 我想对类型进行类型
MapOutput
检查KeyVal[K, C]
, - 我想检查
C
是否与 中使用的类型相同f
, - 我还需要“提取”
K
以便mem
从apply
.
要问的很多吗?:) 我想写类似的东西
到我将实例化的时候,ReducerComponent
我所拥有的只是f
and MapOutput
,所以推断 V 是可以的。但是我只有KeyVal[K,V]
一个类的类型参数,它可以不同于KeyVal[_,_]
.
我知道如果您了解类型推断的工作原理,我的要求可能很疯狂,但我不知道!而且我什至不知道什么是继续的好方法——除了在我的高级代码中一直进行显式类型声明。我应该改变所有的架构吗?
scala - 为 Try[T] 做一个方便的日志功能,但是因为类型系统而卡住了
我想知道这是否可以使用 Scala 的类型系统来完成。
基本上,我想创建一个接受 aresult
类型Try[T]
并打印出一条消息的日志记录方法,该消息取决于result
是 aSuccess
还是 aFailure
例如,签名可能看起来像
并且可以这样使用:
这将输出
size is 13 kb
如果size
是Success(x: Int)
,例如,Success(13)
或者
error: size is (not available)
如果size
如果类型Failure(t: Throwable)
棘手的部分是,如果它是 a ,我们需要能够访问Try
用于打印到屏幕的对象,或者如果它是 a作为占位符Success
,则打印选择的默认字符串(例如“(不可用)”) 。Failure
此外,它必须使用非常通用的类型,T
或者Any
范围可以从简单的标量值到类的实例等。
这个古怪函数的用例是,它可以非常方便地以一种信息丰富的方式记录 Try 对象,而不会用 map/recover 或 match 语句使代码混乱。
这是我想出的骨架,当然最难的部分还没有弄清楚。
scala - Scala 通用函数...在函数中使用 T
我有点困惑为什么下面的代码不起作用:
该函数将按如下方式调用:
我收到以下错误:
我对 Scala 泛型相当陌生......有什么办法可以做我想做的事情吗?
scala - Scala 泛型 - 为什么 scala 在使用类型约束时返回超类型的实例而不是子类型?
我正在尝试将 y 转换为可以附加到 x 的东西,其中 x 是某种序列。
我有以下解决方案:
但我怀疑为什么原来的那个不起作用。看起来如果我应用:+
在超类中定义的运算符(在这种情况下)然后它返回超类?即 ifU
是 a Vector
,foo
返回Seq
,所以我得到错误required "U" but found "Seq[T]"
。
谁能启发我为什么会看到这种行为?
scala - 将 scalatest 与 mockito 一起使用时,scalatest 会抛出奇怪的异常
我需要有关 scalatest 和 mockito 的帮助。我想用泛型为一个简单的方法编写测试:
我的测试课:
当我运行测试时,它会引发以下异常:
那么,如果我的方法只有 3 个参数,为什么它会询问 4 个匹配器?是因为通用吗?
版本:
- 斯卡拉 2.11.7
- scalatest 2.2.4
- 模拟 1.10.19
scala - 编写一些通用 scala 集合的函数
我已经定义了一个案例类...
...这将作为 Akka Actors 之间的消息传递。接收器将使用 过滤一些类型A
的集合,descriptor
然后使用 . 从生成的过滤集合中选择单个元素selector
。
如所写,它仅在接收参与者的集合具有 type 时才有效immutable.Seq[A]
。我想概括以上内容,以便它可以与 type 元素的通用集合一起使用A
。这可能吗?
scala - Scala:类型擦除不利地扩大了案例的界限
更新
这个问题是关于用Any
inA
替换的step(x.flatMap((a: Any) => f(a).flatMap(g)))
。模式匹配中的类型擦除似乎使这变得困难。
我很欣赏评论中的观点,即 Free monad 与问题的症结无关。我需要的示例包括泛型类型A
和泛型类型F[_]
(更高种类的类型?)。
这是一个迂腐的问题,我很想知道“如何绕过类型擦除”(如何在 Scala 上绕过类型擦除?或者,为什么我不能获得我的集合的类型参数?),即使代码编译。我自己不知道如何将 TypeTags 应用于此。
静态类型检查的提及很有用。有人会解释为什么Any
设置为A
静态类型检查而不是动态类型检查吗?我相信类型擦除使静态类型检查在这里变得不可能,并且编译器正在退回到动态类型检查以解析Any
为A
. 谢谢
我有三个案例类,
从 trait 继承Free
:
step
,以及上面的类,是“Scala 中的函数式编程”第 13 章中用于实现蹦床的练习的一部分。
因为类型擦除不鼓励case FlatMap(FlatMap(x, f), g)
在Any
. 然后,给定的匿名函数的所需签名x.flatMap
变为Any=>Free[F,A]
。我希望这个函数所需的签名是A=>Free[F,A]
——运行时的真正签名。
注释给flatMap
as的匿名函数的输入类型A
会使编译失败,
我明白这是因为A
它只是以下的一个子集Any
:
Any
类型擦除使我无法缩小范围A
:
以这种方式注释case
语句除了文档之外没有其他用途,甚至会导致问题,写在这里:Scala: type annotations make tail recursion check fail
我不知道如何将 TypeTags 应用于这种情况。
我怎样才能注释这个语句来case
打倒?谢谢!!Any
A
scala - Scala 和 Java 泛型 - 类型不匹配错误
有一个带有这个签名的方法:
在 Scala 中,我使用了这样的方法:
并编写了一个函数来过滤掉所有带有这个签名的锚标签:
但我收到一条错误消息,内容如下:
有人可以为我解释一种方法来声明我的函数,该函数允许我实际传入的类型,这有点令人困惑。
scala - 反思类型成员?
我知道这是可能的:
但是,现在我想做A
一个抽象类型:
如何实现该isDouble
功能?