我有一个名为MYLIBS的包,由两个库lib1和lib2组成,我想通过包的配置文件导出它们。项目结构如下:
\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\nRun Code Online (Sandbox Code Playgroud)\n\n在lib2中我有:
\n\nadd_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)\nRun Code Online (Sandbox Code Playgroud)\n\n与 lib1 相同,只是 lib1 没有add_dependencies()和target_include/link(),因为它没有 。
在我的配置文件模板中,我有:
\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) 为什么会出现以下情况:
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。这是为什么?
目前我有一个实现peano算法的程序:
sealed trait NaturalNumber
Run Code Online (Sandbox Code Playgroud)
和一个调用的函数getResource在其参数中选择具有接口的自然数字类型值:
sealed trait VersionNumber {
type Nat <: NaturalNumber
}
Run Code Online (Sandbox Code Playgroud)
并根据引用类型 - 值版本号检查值:MAJ并MIN在此接口中提供:
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) 假设我有:
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那个吗?
假设我有以下结构:
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]并返回地图的函数。有没有办法跳过这个嵌套结构并在功能上将元素附加到大地图中?
我有:
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。
我有一个 Postgres 表,mytable其中一个字段如下:
myField JSONB[] NOT NULL
让我们假设上述 jsons 是这种形式:
{ "letter":"A", "digit":30}
我应该使用哪些查询:
digit值?digit值的 json 数组?digit值的数组在哪里digit > 20?digit值的 json 数组在哪里digit > 20?如果我将数据存储为 json ,其中 json 是一个列表,上述查询将如何改变?
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)
这是怎么回事?
假设我有:
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) scala ×6
scala-cats ×2
applicative ×1
c++ ×1
cmake ×1
collections ×1
dependencies ×1
either ×1
groovy ×1
hierarchical ×1
json ×1
postgresql ×1
tuples ×1
validation ×1