小编Cor*_*ped的帖子

如何在Scala中将字符串转换为运行时符号?

我有一个类似于下面的案例类:

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)

如何将符号转换为字符串,追加/前置并再次将其更改为符号?或者更简单一点,我如何更改符号的名称?

string symbols scala

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

在Scala中的类字段中查找合成成员

我在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的最后一点,我需要摆脱一个类的合成成员.我怎么做?

reflection scala jacoco synthetic

5
推荐指数
1
解决办法
1144
查看次数

在scala中格式化JSON字符串

是否有一种直接的方式来格式化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的情况下完成吗?

formatting json scala

5
推荐指数
1
解决办法
7554
查看次数

单个对象的protected [package]和private [package]之间的区别

我试图将对象中存在的方法的访问权限限制为对象所属的包.该方法由包内的许多类使用.我有两个选择:

protected[pkg] object MyObject{....}
Run Code Online (Sandbox Code Playgroud)

要么

private[pkg] object MyObject{....}
Run Code Online (Sandbox Code Playgroud)

它们都工作得很好.我的问题是,既然对象不能被任何类/对象扩展,那么它们不是等价的吗?

inheritance scope scala object

5
推荐指数
1
解决办法
366
查看次数

Seq 的使用与 List、Array 和 Vector 的使用相比如何?

在 SO,我看到了将Array 与 SeqList 与 Seq以及Vector 与所有内容进行比较的问题。但我不明白一件事。我什么时候应该真正使用 aSeq来替代其中的任何一个?我知道何时使用 a List、何时使用 anArray以及何时使用 a Vector。但是什么时候使用Seq而不是上面列出的任何集合是一个好主意呢?为什么我应该使用trait扩展Iterable而不是上面列出的所有具体类?

scala list vector seq scala-collections

5
推荐指数
1
解决办法
3856
查看次数

scala中所有子包使用同一个包文件

我有一个包对象,包中有一些隐式类,比如x。让我们称之为在一个文件中x.scala。我有两个子包x.ax.b. 我还需要在两个子包中使用相同的隐式类。截至目前我已经为两个子包封装对象:a.scalab.scala和复制的代码在两个物体的隐含类。必须有一种方法可以以更好的方式做到这一点。我可以以某种方式使用包的包对象x并在两个子包中使用它吗?

scala package

4
推荐指数
1
解决办法
1056
查看次数

通过Reflection获取案例类的参数

作为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)

我知道网上有很多关于同一问题的例子,但正如我所说,我想知道什么是提取所需信息的最理想方式

reflection scala introspection scala-2.10

3
推荐指数
2
解决办法
2051
查看次数

从 Scala 中的 Some 中提取字段

我知道 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)

但是有没有一种理想的方法来做到这一点?

scala scala-option

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

在Scala中提取两个字符串之间的字符串

我有一系列像这样的字符串:

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中使用正则表达式执行此操作?

regex scala

3
推荐指数
2
解决办法
4395
查看次数

如何确保我的 cronjob 作业不会在失败时重试?

我有一个在 GKE 上运行并运行 Cucumber JVM 测试的 Kubernetes Cronjob。如果由于断言失败、某些资源不可用等原因导致 Step 失败,Cucumber 会正确地抛出一个异常,导致 Cronjob 作业失败并且 Kubernetes pod 的状态更改为ERROR。这会导致创建一个新的 pod,该 pod 尝试再次运行相同的 Cucumber 测试,但再次失败并再次重试。

我不希望发生任何这些重试。如果 Cronjob 作业失败,我希望它保持失败状态并且根本不重试。基于,我已经尝试将设置backoffLimit: 0restartPolicy: 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

2
推荐指数
1
解决办法
1124
查看次数