我有一个类似于下面的案例类:
case class Outcome(text: Symbol)
Run Code Online (Sandbox Code Playgroud)
现在我需要在运行时更改文本的值.我尝试做这样的事情:
val o2 = o1.copy(text.name = "foo" ++ text.name)
Run Code Online (Sandbox Code Playgroud)
这显然给了我一个编译错误:
type mismatch; found : String required: Symbol
Run Code Online (Sandbox Code Playgroud)
如何将符号转换为字符串,追加/前置并再次将其更改为符号?或者更简单一点,我如何更改符号的名称?
我在scala中使用以下方法来获取类中的所有字段:
val fields = contract.getClass.getDeclaredFields.toList.map(value => {
value.setAccessible(true)
value.getName
})
Run Code Online (Sandbox Code Playgroud)
contract已被定义为我的代码中的类.由于我使用反射,问题是我得到另一个元素$jacocoData作为字段之一.我想忽略这个领域."hacky"这样做的方法是知道它总是附加在列表末尾的事实,所以我可以通过改变我的函数签名来"修复"它,productArity并且只采用这样的第一个arity元素:
def getFields(contract: Contract, arity: Int): List[String] = {
val fields = contract.getClass.getDeclaredFields.toList.map(value => {
value.setAccessible(true)
value.getName
})
//to ignore $jacocoData (Java code coverage) field
val firstnFields = fields.take(arity)
firstnFields
}
Run Code Online (Sandbox Code Playgroud)
根据这个FAQ的最后一点,我需要摆脱一个类的合成成员.我怎么做?
是否有一种直接的方式来格式化scala中的JSON字符串?
我有一个像这样的JSON字符串:
val json = {"foo": {"bar": {"baz": T}}}
Run Code Online (Sandbox Code Playgroud)
我可以使用这样的功能f:
f(json) = {
"foo":
{"bar":
{"baz": T}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我在答案中所做的格式并不完美,但你明白了.是的,可以在不使用Play Framework的情况下完成吗?
我试图将对象中存在的方法的访问权限限制为对象所属的包.该方法由包内的许多类使用.我有两个选择:
protected[pkg] object MyObject{....}
Run Code Online (Sandbox Code Playgroud)
要么
private[pkg] object MyObject{....}
Run Code Online (Sandbox Code Playgroud)
它们都工作得很好.我的问题是,既然对象不能被任何类/对象扩展,那么它们不是等价的吗?
在 SO,我看到了将Array 与 Seq、List 与 Seq以及Vector 与所有内容进行比较的问题。但我不明白一件事。我什么时候应该真正使用 aSeq来替代其中的任何一个?我知道何时使用 a List、何时使用 anArray以及何时使用 a Vector。但是什么时候使用Seq而不是上面列出的任何集合是一个好主意呢?为什么我应该使用trait扩展Iterable而不是上面列出的所有具体类?
我有一个包对象,包中有一些隐式类,比如x。让我们称之为在一个文件中x.scala。我有两个子包x.a和x.b. 我还需要在两个子包中使用相同的隐式类。截至目前我已经为两个子包封装对象:a.scala与b.scala和复制的代码在两个物体的隐含类。必须有一种方法可以以更好的方式做到这一点。我可以以某种方式使用包的包对象x并在两个子包中使用它吗?
作为Matt R问题的后续跟进 ,由于Scala 2.10已经出现了相当长的一段时间,因此提取案例类的字段和值的最佳方法是什么.举一个类似的例子:
case class Colour(red: Int, green: Int, blue: String) {
val other: Int = 42
}
val RBG = Colour(1,3,"isBlue")
Run Code Online (Sandbox Code Playgroud)
我想得到一个列表(或数组或任何迭代器),它将构造函数中声明的字段作为这样的元组值:
[(red, 1),(green, 3),(blue, "isBlue")]
Run Code Online (Sandbox Code Playgroud)
我知道网上有很多关于同一问题的例子,但正如我所说,我想知道什么是提取所需信息的最理想方式
我知道 Some 对象可以是 None 或我传递的对象之一。鉴于它不是 None 的事实,从 Some 对象中提取字段的理想方法是什么?我制作了一个“At”类,它的字段之一是“日期”。由于 Some 类具有与 Product 特征的混合,因此以下工作正常:
(An object with return type Some(At)).productElement(0).asInstanceOf[At].date
Run Code Online (Sandbox Code Playgroud)
但是有没有一种理想的方法来做到这一点?
我有一系列像这样的字符串:
val foo = Seq("bar scala baz", "bar java baz", "bar python baz")
Run Code Online (Sandbox Code Playgroud)
我需要在两者之间提取所有内容bar,baz以便得到类似这样的内容:
val foobarbaz = Seq("scala", "java", "python")
Run Code Online (Sandbox Code Playgroud)
如何在Scala中使用正则表达式执行此操作?
我有一个在 GKE 上运行并运行 Cucumber JVM 测试的 Kubernetes Cronjob。如果由于断言失败、某些资源不可用等原因导致 Step 失败,Cucumber 会正确地抛出一个异常,导致 Cronjob 作业失败并且 Kubernetes pod 的状态更改为ERROR。这会导致创建一个新的 pod,该 pod 尝试再次运行相同的 Cucumber 测试,但再次失败并再次重试。
我不希望发生任何这些重试。如果 Cronjob 作业失败,我希望它保持失败状态并且根本不重试。基于此,我已经尝试将设置backoffLimit: 0与restartPolicy: Never结合结合使用concurrencyPolicy: Forbid,但它仍然通过创建新的 pod 并再次运行测试来重试。
我错过了什么?这是我的 Cronjob kube 清单:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: quality-apatha
namespace: default
labels:
app: quality-apatha
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
backoffLimit: 0
template:
spec:
containers:
- name: quality-apatha
image: FOO-IMAGE-PATH
imagePullPolicy: "Always"
resources:
limits: …Run Code Online (Sandbox Code Playgroud) cucumber-jvm kubernetes google-kubernetes-engine kubernetes-pod kubernetes-cronjob
scala ×9
reflection ×2
cucumber-jvm ×1
formatting ×1
inheritance ×1
jacoco ×1
json ×1
kubernetes ×1
list ×1
object ×1
package ×1
regex ×1
scala-2.10 ×1
scala-option ×1
scope ×1
seq ×1
string ×1
symbols ×1
synthetic ×1
vector ×1