即使Box和Option monad普遍存在,我们仍然需要在这里和那里检查空值.到目前为止,我提出的最好的方法是使用Box#!! 方法:
(Box !! possiblyNull).map(_.toString).openOr("")
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?我尝试使用Box的apply方法:
Box(possiblyNull).map(_.toString).openOr("")
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨对重载定义的模糊引用,特别是:
[InType,OutType](value: InType)
(pf: PartialFunction[InType,OutType])net.liftweb.common.Box[OutType]
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会发生这种情况,但我希望有一种更简洁,更简洁的方式来说"给我这个字符串的价值,或者只是".我正在考虑使用tryo,但认为这很浪费可以避免的例外情况.
我正在尝试将Lift应用程序集成到一些现有的Java代码中.在我的一个片段中,我有一个Java对象Array,我需要将它映射到NodeSeq.我可以获得一个节点数组,但不能获得NodeSeq.(至少,不是以非常实用的方式).
import scala.xml.NodeSeq
// pretend this is code I can't do anything about
val data = Array("one", "two", "three")
// this is the function I need to write
def foo: NodeSeq = data.map { s => <x>{s}</x> }
// ^
// error: type mismatch;
// found : Array[scala.xml.Elem]
// required: scala.xml.NodeSeq
Run Code Online (Sandbox Code Playgroud)
最干净的方法是什么?
所以我一直在互联网上寻找有关数据库的电梯如何工作的一个很好的解释.我还没有找到任何非常有用的东西.我正在寻找的是一个简单的解释或代码示例,可以显示lift如何连接到其数据库以执行事务以及如何使用它来创建新表,模型或更新和编辑现有表.
例如:使用django,我很容易弄清楚它是如何从模型类生成数据库表并通过它从框架继承的方法对它们执行更新的.
我正在尝试创建一个简单的应用程序,其中包括用户,有关他们的信息,网站上的帖子等.
我目前正在阅读可用的升降机书籍,非常感谢您学习如何使用升降机的更多帮助.
经过1.5年多的Ruby和Rails编程,我终于开始研究Scala和Lift中的一个新项目.基本上我正在尝试编写一个API来访问来自庞大数据库(数百万行)的信息.Lift应该帮助我编写这个项目的前端(API部分).但现在,这还涉及一个模块,该模块将从压缩的ZIP XML文件中读取,以便最初使用行填充数据库.该模块需要在3个月内运行一次.
我应该在哪里放置这个模块代码?或者更确切地说,我应该如何组织我的Lift和Scala代码?后台进程在哪里?欢迎提出这方面的任何指示.
我sbt使用最基本的指南创建了一个空白项目,具体来说:
> cd xyz
> sbt # here we create a new project w/ Scala 2.8.1
> *lift is org.lifty lifty 1.6.1
> lift create project-blank
Run Code Online (Sandbox Code Playgroud)
但是当我在IntelliJ中打开项目时,它无法正确识别通过sbt下载的.jars.所有进口都是红色的

当我进入库部分的项目设置(Ctrl+ Alt+ Shift+ S)时,它们都是灰色的.

除此之外,项目源被正确识别为具有Web构面的Scala项目

我忘记配置了什么吗?我已经尝试使用本指南通过maven创建一个项目 ,但我更喜欢使用SBT而不是maven.
考虑以下json:
{
"type":"A1",
"system":{
"path":"/example.org/FooBar",
"lastModified":"2013-10-01T12:00:00Z"
},
"fields":{
"foo1":["bar1"],
"foo2":["bar2"],
"foo3":["bar3"]
}
}
Run Code Online (Sandbox Code Playgroud)
现在,使用lift-json,我想将此json更改为:
{
"type":"A1",
"system":{
"path":"/example.org/FooBar",
"lastModified":"2013-10-01T12:00:00Z"
},
"fields":{
"foo1":["bar1"],
"foo2":["bar2"],
"foo3":["bar3"]
},
"injected":{
"bar1":"foo1",
"bar2":"foo2"
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我尝试了以下内容:
scala> val json = parse("""
|{
| "type":"A1",
| "system":{
| "path":"/example.org/FooBar",
| "lastModified":"2013-10-01T12:00:00Z"
| },
| "fields":{
| "foo1":["bar1"],
| "foo2":["bar2"],
| "foo3":["bar3"]
| }
|}""")
json: net.liftweb.json.JValue = JObject(List(JField(type,JString(A1)), JField(system,JObject(List(JField(path,JString(/example.org/FooBar)), JField(lastModified,JString(2013-10-01T12:00:00Z))))), JField(fields,JObject(List(JField(foo1,JArray(List(JString(bar1)))), JField(foo2,JArray(List(JString(bar2)))), JField(foo3,JArray(List(JString(bar3)))))))))
scala> json transform{case JObject(l) => JObject(l ::: List(JField("injected", ("bar1" -> "foo1") ~ ("bar2" …Run Code Online (Sandbox Code Playgroud) 我可以在同一个项目中使用Scala和Java吗?我是编程新手,所以这对我来说有点混乱.
从我的研究中我已经读到,获得一个好项目的最佳组合是Java/Spring或Scala/Lift的组合.为什么存在这些组合?是不是可以使用Scala with Spring或Java with Lift?
如果我使用Scala,我应该在Scala代码中拥有整个配置吗?或者我可以拥有外部资源,因此每次Scala代码都不应该修改.
我刚刚开始使用lift,我现在正在尝试将普通表单更改为ajax表单,但该方法processEntryAdd永远不会被调用.
def addUser(xhtml : Group) : NodeSeq = {
var firstName = ""
var lastName = ""
def processEntryAdd() {
Log.info("processEntryAdd: " + firstName + ", " + lastName)
}
SHtml.ajaxForm(
bind("entry", xhtml,
"firstName" -> SHtml.text(firstName,
(x) => {
Log.info("Setting firstName to " + x);
firstName = x
}),
"lastName" -> SHtml.text(lastName,
(x) => {
Log.info("Setting lastName to " + x);
lastName = x
}),
"submit" -> SHtml.submit("Add user", processEntryAdd),
))
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何实现我想要做的,或为什么上面的代码不起作用.按下按钮时会提交两个表单字段的值,firstName并且lastName设置了两个局部变量,但未调用与SHtml.submit关联的函数.
谢谢!
我有一个Lift应用程序打包为WAR存档,必须在Jetty下部署.但是,我希望能够自动执行一些任务:
我正在使用SBT,我不知道这将与Puppet或类似的东西有多好.你会怎么做?