小编Mat*_*oob的帖子

CMake:多库包导出中的依赖关系管理

我有一个名为MYLIBS的包,由两个库lib1lib2组成,我想通过包的配置文件导出它们。项目结构如下:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Lib1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib1-class.cpp\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib1-class.h\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib2\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib2-class.cpp\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib2-class.h\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 LIBSConfig.cmake.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

lib2中我有:

\n\n
add_library(lib2\n        STATIC\n        ${SOURCE_FILES}\n        )\ntarget_include_directories(lib2 PRIVATE /path/to/lib1)\ntarget_link_libraries(lib2 PUBLIC lib1)\nadd_dependencies(lib2 lib1)\ninstall(\n        TARGETS\n        lib2\n        DESTINATION\n        lib/MYLIBS/lib2\n        EXPORT\n        lib2Exports\n)\ninstall(\n        EXPORT\n        lib2Exports\n        DESTINATION\n        lib/MYLIBS/lib2\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

与 lib1 相同,只是 lib1 没有add_dependencies()target_include/link(),因为它没有 。

\n\n

在我的配置文件模板中,我有:

\n\n
@PACKAGE_INIT@\n## PROJECT_LIBRARIES is filled-in during the package build. in this case : lib1,lib2\nset(@PROJECT_NAME@_LIBRARIES @PROJECT_LIBRARIES@)\n\n## The public …
Run Code Online (Sandbox Code Playgroud)

c++ dependencies cmake dependency-management

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

Scala:将空序列与 Nil 匹配

为什么会出现以下情况:

val x: Seq[Any] = Vector.empty
x match {
 case Nil => 1
 case _ => 2
}
Run Code Online (Sandbox Code Playgroud)

其中Vector.empty内部等于:

private[immutable] val NIL = new Vector[Nothing](0, 0, 0)
override def empty[A]: Vector[A] = NIL
Run Code Online (Sandbox Code Playgroud)

匹配Nil并返回1?不Nil只是 的特定子类型吗Seq

如果我使用更通用的 . 答案仍然相同Seq.empty。这是为什么?

collections scala pattern-matching hierarchical

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

Scala:由嵌套类型值参数化的类型级编程

目前我有一个实现peano算法的程序:

sealed trait NaturalNumber
Run Code Online (Sandbox Code Playgroud)

和一个调用的函数getResource在其参数中选择具有接口的自然数字类型值:

sealed trait VersionNumber {
  type Nat <: NaturalNumber
}
Run Code Online (Sandbox Code Playgroud)

并根据引用类型 - 值版本号检查值:MAJMIN在此接口中提供:

trait ResourceManifest {
  def getResource: Int
  type Major <: NaturalNumber
  type Minor <: NaturalNumber
}
Run Code Online (Sandbox Code Playgroud)

取决于哪个,函数执行或不编译.该函数具有以下形式:

    def getResource(manifest: ResourceManifest)(maj: VersionNumber, min: VersionNumber)
               (implicit
                maj_check: manifest.Major IsEqual maj.Nat,
                min_check: manifest.Minor IsLessOrEqual min.Nat
) = manifest.getResource
Run Code Online (Sandbox Code Playgroud)

这是完整的代码.(如果你喜欢类型递归,这是一个替代实现.)

实际上,这是由覆盖的类型值驱动的,普通的Scala用户可能不太习惯.此外,getResource获取主要版本和次要版本的单独参数.

理想情况下,我想用户在包装类中提供值而不是类型:

case class VersionInfo(major: VersionNumber, minor: VersionNumber)
Run Code Online (Sandbox Code Playgroud)

所以我的清单是这样的形式:

trait ResourceManifestRefactored {
  def getResource: Int
  val …
Run Code Online (Sandbox Code Playgroud)

scala type-constraints type-level-computation

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

猫:映射具有相同应用的元组

假设我有:

val x1: Either[String, Int] = Right(1)
val x2: Either[String, Float] = Left("Nope")
val x3: Either[String, Double] = Left("Not Today")
Run Code Online (Sandbox Code Playgroud)

我想将它们组合在一起并得到一个Either[NonEmptyList[String], (Int, Float, Double)]. 为此,我目前正在执行以下操作:

import cats.syntax.all._
(
  x1.toValidatedNel,
  x2.toValidatedNel,
  x3.toValidatedNel
).tupled
 .toEither
Run Code Online (Sandbox Code Playgroud)

这可以完成工作,但有点乏味。有没有办法toValidatedNel只调用一次来做到这一点?就像是:

(x1, x2, x3)
  .fooMap(_.toValidatedNel)
  .tupled
  .toEither
Run Code Online (Sandbox Code Playgroud)

fooMap猫身上是否存在这样的东西?或者我们需要HLists那个吗?

scala tuples either applicative scala-cats

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

在 Groovy 中展平嵌套映射

假设我有以下结构:

Map<String,Map<String,Integer>> nestedMap = [
"x": ["a": 2, "b": 3, "c": 4],
"y": ["a": 20, "b": 30, "c": 40],
"z": ["a": 200, "b": 300, "c": 400]
]
Run Code Online (Sandbox Code Playgroud)

我想压平这个结构并得到:

[
"x-a" : 2, 
"x-b" : 3, 
"x-c" : 4,
"y-a" : 20, 
"y-b" : 30, 
"y-c" : 40,
"z-a" : 200, 
"z-b" : 300, 
"z-c" : 400
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能用collect/collectEnteries等来做到这一点?

或者,如您所见,这些值非常相似。所以我构建这个嵌套地图结构的方式是运行一个 for 循环迭代[x,y,z]并将我的地图的条目设置为等于一个迭代[a,b,c]并返回地图的函数。有没有办法跳过这个嵌套结构并在功能上将元素附加到大地图中?

groovy

4
推荐指数
2
解决办法
3940
查看次数

Scala:建立一对多关系

我有:

val intsPerChar: List[(Char, List[Int])] = List(
  'A' -> List(1,2,3),
  'B' -> List(2,3)
)
Run Code Online (Sandbox Code Playgroud)

我想用它们具有映射关系的字符获取整数的映射关系。即,我想得到:

val charsPerInt: Map[Int, List[Char]] = Map(
  1 -> List('A'),
  2 -> List('A', 'B'),
  3 -> List('A', 'B')
)
Run Code Online (Sandbox Code Playgroud)

目前,我正在执行以下操作:

val numbers: List[Int] = l.flatMap(_._2).distinct
numbers.map( n =>
  n -> l.filter(_._2.contains(n)).map(_._1)
).toMap
Run Code Online (Sandbox Code Playgroud)

是否有一种不太明确的方法?理想的是某种groupBy

scala

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

jsonb[] vs jsonb,其中 json 是一个数组

我有一个 Postgres 表,mytable其中一个字段如下:

myField JSONB[] NOT NULL

让我们假设上述 jsons 是这种形式:

{ "letter":"A", "digit":30}

我应该使用哪些查询:

  • 提取一组digit值?
  • 提取包含digit值的 json 数组?
  • 提取digit值的数组在哪里digit > 20
  • 提取digit值的 json 数组在哪里digit > 20

如果我将数据存储为 json ,其中 json 是一个列表,上述查询将如何改变?

  • 我还可以进行上述所有查询吗?
  • 性能差异是什么?
  • 我什么时候应该选择一个?

postgresql json

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

Scala:用两种类型参数化的类型的简写

Scala允许使用以下类型:

=:=[Int, String] 
Run Code Online (Sandbox Code Playgroud)

如:

Int=:=String
Run Code Online (Sandbox Code Playgroud)

此功能似乎不限于此类型,我也可以举例如:

type Or[A,B] = Either[A,B]
val x: Int Or String = Right("value")
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

scala

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

Scala-Cats:验证Map的条目

假设我有:

val m: Map[String, Int] = Map("one" -> 1, "five" -> 5, "six" -> 6, "nine" -> 9)
Run Code Online (Sandbox Code Playgroud)

我有两个功能:

def isNotDivisibleByTwo(i: Int): ValidatedNec[String, Int] = Validated.condNec(i%2!=0, i, s"$i is divisible by 2.")

def isNotDivisibleByThree(i: Int): ValidatedNec[String, Int] = Validated.condNec(i%3!=0, i, s"$i is divisible by 3.")
Run Code Online (Sandbox Code Playgroud)

我想要一个给我的功能:

def sanitize(m: Map[String, Int]):Map[String, Validated[NonEmptyList[String], Int]] = ???
Run Code Online (Sandbox Code Playgroud)

它应该返回满足上述两个功能的所有数字,以及所有失败数字及其相关故障的映射。
例如对于给定的列表m,我想得到:

val result = Map(
  "one" -> Valid(1),
  "five -> Valid(5),
  "nine" -> Invalid(NonEmptyList("9 is dividible by 3")),
  "six" -> Invalid(NonEmptyList("6 is dividible …
Run Code Online (Sandbox Code Playgroud)

validation scala scala-cats

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