小编J P*_*lar的帖子

Scala禁止分配值类

根据价值类的文件,它们可能在许多情况下分配:

分配摘要

值类被视为另一种类型.

值类被分配给数组.

进行运行时类型测试,例如模式匹配.

无论如何说,如果出现这些情况,会抛出编译错误吗?

scala value-class

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

Scala使用coalesce preappend方法扩展List类

我试图创建一个新的运算符:?在列表上,其操作与::相同,但如果值为null,则返回原始列表.我写了以下内容,但很快就知道我不知道自己在做什么......

object ImplicitList {
   implicit def extendIterator[T](i : List[T]) = new ListExtension(i)

 }

 class ListExtension[T <: Any](i : List[T]) {
  def :?[B >: T] (x: B): List[B] = if (x != null) x :: i else i
 }


 final case class :?[B](private val hd: B, private val tl: ListExtension[B]) extends ListExtension[B](tl.:?(hd))
Run Code Online (Sandbox Code Playgroud)

scala list coalesce extending

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

Scala,崩溃选项的选项

我想知道是否有一个简短的手来折叠选项的地图.例如

def divideByThree(x:Int) = if (x == 0) None else Some(x/3)

val result = Some(6) map (divideByThree(_))
resut:Option[Option[Int]] = Some(Some(2))
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题我做了

val result = Some(6) match {
   case Some(i) => divideByThree(i)
   case None    => None
}
Run Code Online (Sandbox Code Playgroud)

这看起来有点沉重.我可以在Option上创建一个隐式函数map mapOption来解决这个问题,但我想知道是否有一种我没有想过的更好的方法.

scala scala-option

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

在Scala中连接TraversableOnce对象?

我想将可遍历的一次连接到可遍历的一次而不解决任何一次.这是我提出的一个隐含的解决方案,但我不知道我是否缺少原生解决方案......

object ImplicitTraversableOnce {
  implicit def extendTraversableOnce[T](t : TraversableOnce[T]) = new TraversableOnceExtension(t)
}

class TraversableOnceExtension[T <: Any](t : TraversableOnce[T]) {

  def ++ (t2:TraversableOnce[T]):TraversableOnce[T] = new concat(t.toIterator, t2.toIterator)

  private class concat(i1:Iterator[T], i2:Iterator[T]) extends Iterator[T] {
    private var isOnSecond = false

    def hasNext:Boolean =
      if (isOnSecond) i2.hasNext
      else if (!i1.hasNext) {
        isOnSecond = true
        hasNext
      }
    else true

    def next():T = if (isOnSecond) i2.next() else i1.next()
  }
}
Run Code Online (Sandbox Code Playgroud)

iterator scala concatenation

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

Rhino 在 Java 中设置 NativeObject 属性

我有一个 javascript 脚本,它在评估时返回一个 NativeObject

obj = context.evaluateString(scope,"({age:3, name:'bob'})", "<source">, 1, null)
Run Code Online (Sandbox Code Playgroud)

然后我将 obj 转换为 NativeObject 或 Map,然后运行 ​​put 方法

castObj.put("surname","smith")
Run Code Online (Sandbox Code Playgroud)

我得到一个 java.lang.UnsupportedOperationException 抛出。还有另一种方法可以更改对象值吗?

java rhino

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

Scala对函数参数名称的反射

我有一个功能的类

 case class FunctionParser1Arg[T, U](func:(T => U))

 def testFunc(name1:String):String = name1
 val res = FunctionParser1Arg(testFunc)
Run Code Online (Sandbox Code Playgroud)

我想知道case类中的函数类型签名信息.我想知道参数名称和类型.我已成功使用运行时镜像对象查找类型,但不是名称.有什么建议?

reflection scala

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

Scala:如何在 Monocle 中更新字段值

鉴于monocle 项目中的JsonExample,我想创建一个镜头,其中 set 调用将替换键/值对中的值,或者创建键/值对(如果它不存在)。

然而,这似乎用索引(可以构成类型安全)或 at 表示,它不是类型安全的

//for replacing:
(jsObject composeOptional index("age") composePrism jsNumber).set(45)

//for creating:
(jsObject composeLens at("age")).set(JsNumber(45)) <- will accept any old json
Run Code Online (Sandbox Code Playgroud)

我所追求的可能吗?
我也可以扩展它,如果年龄嵌套在另一个 JsObject 中,例如:

val n = (jsObject composeOptional index("nested") composePrism 
jsObject composeOptional index("age") composePrism jsNumber).set(45)
Run Code Online (Sandbox Code Playgroud)

在“嵌套”的键/值对尚不存在的情况下,它将在嵌套处创建对象,然后添加字段

n(JsObject(Map.empty)) -> JsObject(Map("nested" -> JsObject("age" -> JsNumber(45)))
Run Code Online (Sandbox Code Playgroud)

scala monocle-scala

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

选择包含正则表达式匹配的 Jsonb 数组

给定一个数据结构如下:

{"single":"someText", "many":["text1", text2"]}
Run Code Online (Sandbox Code Playgroud)

我可以查询单个正则表达式

WHERE JsonBColumn ->> 'single' ~ '^some.*'
Run Code Online (Sandbox Code Playgroud)

我可以查询数组上的包含匹配

WHERE JsonBColumn -> 'many' ? 'text2'
Run Code Online (Sandbox Code Playgroud)

我想做的是用 JArray 上的正则表达式进行包含匹配

WHERE JsonBColumn -> 'many' {Something} '.*2$'
Run Code Online (Sandbox Code Playgroud)

regex postgresql jsonb

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