关于Scala中的映射,if ms - (k, 1, m)返回包含ms的所有映射的映射,除了具有给定键x,1和m的任何映射.
然后,什么语句将返回ms的所有映射的映射,只有 给定的键x,1和mie我正在寻找ms的子集,其中只有k,1和m是键.
这有效,但很糟糕:
scala> val originalMap = Map("age" -> "20", "name" -> "jack", "hobby" -> "jumping")
ms: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(age -> 20, name -> jack, hobby -> jumping)
scala> val interestingKeys = List("name", "hobby")
interesting: List[java.lang.String] = List(name, hobby)
scala> val notInterestingMap = originalMap -- interestingKeys
notInterestingMap: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(age -> 20)
scala> val interestingMap = originalMap -- notInterestingMap.keySet
interestingMap: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(name -> jack, hobby -> jumping)
Run Code Online (Sandbox Code Playgroud) 我在Scala中经常看到这种类型的模式(在这里找到这个例子):
class UserActor extends Actor {
def receive = {
case GetUser(id) =>
// load the user, reply with None or Some(user)
val user: Option[User] = ...
sender ! user
case FindAll() =>
// find all users
val users: List[User] = ...
sender ! users
case Save(user) =>
// persist the user
sender ! Right(user)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,取决于您获得的呼叫:选项[用户],列表[用户],右[用户].这种方法很好!如果这是最佳的,我只是想问一下它的兴趣?例如(这可能是一个糟糕的):通过总是返回List [User]来尝试和推广它会使API变得更好或更糟吗?因此,当找不到用户或保存失败时,列表将只是空的.我只是好奇......关于如何改进上述'模式'的任何其他建议?
我只是想为这种风格的API确定一个完美的模式,你有时会得到一个实体,有时却没有,有时也只有一个列表.是否有"最佳"方式来实现这一目标,还是每个人都有自己的角色?
类和表定义如下所示:
case class Group(
id: Long = -1,
id_parent: Long = -1,
label: String = "",
description: String = "")
object Groups extends Table[Group]("GROUPS") {
def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
def id_parent = column[Long]("ID_PARENT")
def label = column[String]("LABEL")
def description = column[String]("DESC")
def * = id ~ id_parent ~ label ~ design <> (Group, Group.unapply _)
def autoInc = id_parent ~ label ~ design returning id into {
case ((_, _, _), id) => id
}
}
Run Code Online (Sandbox Code Playgroud)
要更新记录,我可以这样做:
def …Run Code Online (Sandbox Code Playgroud) 我从HTTP请求中得到一个乱码的JSON字符串,所以我正在寻找一个临时解决方案来仅选择JSON字符串.
request.params()返回:
[{"insured_initials":"Tt","insured_surname":"Test"}=, _=1329793147757,
callback=jQuery1707229194729661704_1329793018352
Run Code Online (Sandbox Code Playgroud)
我希望从"{"开始到"}"结束的所有内容.
我发现了很多与其他语言做类似事情的例子,但这样做的目的不仅是解决问题,还要学习Scala.有人请告诉我如何选择{....}部分吗?
如何结合(以一种很好的方式)两个Scala match'es?
首先,我必须测试Option是否是有效值:
myOption match {
case Some(op) =>
doSomethingWith(op)
case None =>
handleTheError()
Run Code Online (Sandbox Code Playgroud)
那么如果op有效,我想测试另一种模式:
Path(request.path) match {
case "work" => {
println("--Let's work--")
}
case "holiday" => {
println("--Let's relax--")
}
case _ => {
println("--Let's drink--")
}
}
Run Code Online (Sandbox Code Playgroud)
我可以这样组合它们:
myOption match {
case Some(op) =>
doSomethingWith(op)
Path(request.path) match {
case "work" => {
println("--Let's work--")
}
case "holiday" => {
println("--Let's relax--")
}
case _ => {
println("--Let's drink--")
}
}
case None =>
handleTheError()
Run Code Online (Sandbox Code Playgroud)
但是,它感觉很草率.是否有更好的方式以某种方式组合它们.
更新
道歉,我应该更好地解释.我实际上试图找出是否存在用于简化(或分解)这些控制结构的已知模式.例如(假设这是真的): …
抱歉,如果这不是一个典型的SO问题,但我希望在同样情况下的某个人能够提供帮助.
在某些国家/地区,您无法打开Google Merchant帐户,但可以打开Google Developer帐户.因此,如果您打开Google Developer帐户,但无法开设商家帐户,您是否仍然可以销售应用程序或仅免费提供这些应用程序?
我问,因为我只是为那些销售他们的应用程序的客户开发,但从未在我的国家(南非)销售应用程序,因此您无法注册为Google Merchant.
更新:
对于那些在我的答案中列出以下国家/地区以外的人,请注意亚马逊Android开发人员目前没有这样的限制,并且开发人员注册目前是免费的(当时或写作).付款通过支票进行.
以下函数工作正常,但我希望它首先按parent_id排序结果,然后按顺序排序.
def getTree = for {
(a, c) <- Activities leftJoin Clients on (_.id === _.id_a)
} yield (a.id, a.label, a.parent_id, a.order, c.id.?, a=c.name)
Run Code Online (Sandbox Code Playgroud)
我如何使用Slick做到这一点?
我想将以下批处理脚本更改为 Scala(只是为了好玩),但是,脚本必须继续运行并监听 *.mkd 文件的更改。如果任何文件发生更改,则脚本应重新生成受影响的文档。文件 IO 一直是我的致命弱点...
#!/bin/sh
for file in *.mkd
do
pandoc --number-sections $file -o "${file%%.*}.pdf"
done
Run Code Online (Sandbox Code Playgroud)
任何围绕这一好方法的想法将不胜感激。
如果您按照官方 Scala 3 站点(如Dotty或Scala Lang)上的步骤进行操作,那么它建议使用 Coursier 安装 Scala 3。问题在于,这些都没有解释在执行这些步骤后如何运行已编译的 Scala 3 应用程序。
斯卡拉 2:
> cs install scala
> scalac HelloScala2.scala
> scala HelloScala2
Hello, Scala 2!
Run Code Online (Sandbox Code Playgroud)
斯卡拉 3:
> cs install scala3-compiler
> scala3-compiler HelloScala3.scala
Run Code Online (Sandbox Code Playgroud)
现在如何使用 Scala 3 运行编译的应用程序?
有没有办法让 Pandoc 在 PDF 输出表格中放置垂直线,而无需编辑 Pandoc 的源代码?
目前我正在使用以下方法生成 PDF:
pandoc --template pandoc-template.tex -V geometry:margin=1in -V geometry:a4paper --number-sections --variable file1.md -o file1.pdf
Run Code Online (Sandbox Code Playgroud)
该表的降价看起来像:
+-----------------+-----------------+
| Row 1 | Some data 1 |
| Row 2 | Some data 2 |
+-----------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
Pandoc 简单地忽略垂直线。我发现了有关此主题的多个问题,但答案仍然不明确。
为上面的降价生成的 Latex 可能看起来像这样,其中管道字符告诉 Latex 为表格生成垂直线:
\begin{longtable}{ | l | l |}
\hline
Row 1 & Some data 1 \\
Row 2 & Some data 2 \\
\hline
\end{longtable}
Run Code Online (Sandbox Code Playgroud)
下面的代码来自 LaTex.hs Pandoc 源文件。我不是 Haskell 开发人员,但它似乎没有选项来添加在 LaTex 中创建垂直线所需的管道字符。
let colDescriptors …Run Code Online (Sandbox Code Playgroud)