Scala 2.10引入了值类.它们对于编写类型安全代码非常有用.此外还有一些限制,其中一些将由编译器检测,有些则需要在运行时进行分配.
我想使用case class
语法创建值类,以允许创建 - 无需新语法和人性化toString
.没有模式匹配,因为它需要分配.
所以问题是:将使用case class
语法需要值类分配吗?
有没有办法强制在分支B中合并分支A,在那里所有可能的冲突将被解决,有利于分支B?
换句话说,如何推动分支A中的最后一个分支B修订而没有虚假的冲突?
我在Play Framework 2中使用Ebean,有时会出现类似的OptimisticLockException:
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[OptimisticLockException: Data has changed. updated [0] rows sql[update manager set modification_time=?, session_id=?, expiration_date=? where id=? and rating=? and creation_time=? and modification_time=? and name=? and surname=? and login=? and password_hash=? and email=? and session_id=? and expiration_date=?] bind[null]]]
Run Code Online (Sandbox Code Playgroud)
当少数演员开始访问数据库时会发生这种情况
那么,Manager类是:
public class Manager extends Model {
@Getter @Setter
Long id;
@Getter @Setter
private String name;
@Getter @Setter
private String surname;
@Column(unique = true)
@Getter @Setter
private String login;
@Getter @Setter
private String passwordHash;
@Getter @Setter
private …
Run Code Online (Sandbox Code Playgroud) 有一个非常简单的Express路由器与处理程序:
router.get('/users/:userId/roles/:roleId', function(req, res, next){
const roleId = req.params.roleId;
res.rest.resource = UserModel.findOne({ _id: req.params.userId}).exec().then(function(usr) {
console.log(req.params.roleId); // => undefined
console.log(roleId); // => okay here
const result = usr.roles.find( role => String(role._id) === String(roleId));
return result;
});
next();
});
Run Code Online (Sandbox Code Playgroud)
因为它看到了req.params.roleId
在诺言回归中的访问undefined
.这仅适用于next()
在promise外部调用的情况then
.
我很好用asyncing和promises,并且理解next()
将在handler之前调用then
.但是发生了req.params.roleId
什么?它变异的原因和位置?被调用的中间件是否next()
相同但是变异了req
?
注意:res.rest.resource
稍后调用的中间件用于构建正确的REST类响应.
Lombok与Play Framework 2的集成怎么样?我真的很喜欢Lombok它使我的代码更具可读性和更少的样板.Play Framework也很精彩.但是如果要混淆它们的话会有很大的麻烦.
主要原因是在域类之前编译的play项目中的scala temlates .所以Lombok,它本身就是编译器的黑客,在那个时候不生成访问器.
问题是:如果有任何方法可以使其发挥作用?
我在Google 网上论坛中发现了一些讨论,但他们没有提供任何合理的解决方案.你有成功吗?
并且..为什么来自Play Framework项目的人不提供类似Lombok的解决方案?无论如何Play充满了代码生成魔法和阴影编译......所以,为什么不呢?
用sbt开发我几乎不使用~run
命令,说我的代码改变了.这很舒服.
现在我要和akka玩一下.有什么方法可以恢复默认的sbt的行为,当ctrl + D停止应用程序,并且代码在运行中被捕获?
这是示例应用程序:
object Main extends App {
println("Starting actors...")
val system = ActorSystem("MySystem")
val myActor = system.actorOf(Props[Actors.MyActor], name = "myActor")
myActor ! "test"
// system.shutdown()
}
object Actors {
class MyActor extends Actor {
val log = Logging(context.system, this)
def receive = {
case "test" => log.info("received test")
case _ => log.info("received something else")
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下run
,~run
命令和命令也不会被ctrl + D打断,也不会重新加载代码.只有ctrl + C才能停止整个sbt.据我所知,Play框架有一些解决方案可以做到这一点,因为它看起来像是在~run
模式下在ctrl + D上停止actor系统
我想知道如何管理不断增长的C++项目.现在,我正在使用Netbeans开发一个项目,这是生成makefile的肮脏工作.该项目已经变得太大了,我决定将其分成几个部分.这样做的最佳方式是什么?
我正在尝试使用Scons作为我的构建系统.我已经取得了一些成功,但是每次添加或删除文件时都应该编辑构建脚本.太沉闷了.
所以我需要你的建议.
PS顺便问一下,谷歌Chrome这样的大型项目如何做到这一点?是否每个人都使用某种IDE来构建仅为软件分发生成的脚本?
我使用scons几天而且有点困惑.为什么没有内置工具从给定的根开始递归地构建源?让我解释一下:我有这样的来源性格:
src
Core
folder1
folder2
subfolder2_1
Std
folder1
Run Code Online (Sandbox Code Playgroud)
..等等.这棵树可能更深.
现在我用这样的结构构建它:
sources = Glob('./builds/Std/*/*.cpp')
sources = sources + Glob('./builds/Std/*.cpp')
sources = sources + Glob('./builds/Std/*/*/*.cpp')
sources = sources + Glob('./builds/Std/*/*/*/*.cpp')
Run Code Online (Sandbox Code Playgroud)
这看起来并不那么完美.当然,我可以编写一些python代码,但是有更合适的方法吗?
是否有一些内置工具或插件将我的所有页面脚本保存在一个文件中?我在播放邮件列表中找到了一些主题,但他们都没有回答这个问题.
此外,谷歌封闭编译器在某个地方很深,但看起来除了框架开发人员之外没有人真正知道如何让它工作.
无论如何,如果有一些工具至少可以在一个文件中将我的所有css连接在一起,那将是非常好的.
传递undefined
React的onClick
处理程序安全吗?
我只是试过了,一切都仍然有效,但是我在文档中找不到与此相关的任何内容。
例:
function MonthBar(props) {
/* is it okay when props.onClick === undefined ? */
return <span onClick={props.onClick}>{props.monthName}</span>;
}
MonthBar.propType = {
onClick: React.PropTypes.func, // optional
monthName: React.PropTypes.string.isRequired
};
Run Code Online (Sandbox Code Playgroud) 我正在编写小应用程序,使用Play Framework 2.0,它使用Ebean作为ORM.所以我需要User类和UserGroup类之间的多对多关系.这是一些代码:
@Entity
public class User extends Domain {
@Id
public Long id;
public String name;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public Set<UserGroup> groups = new HashSet();
}
@Entity
public class UserGroup extends Domain {
@Id
public Long id;
public String name;
@ManyToMany(mappedBy="groups")
public Set<User> users = new HashSet();
}
Run Code Online (Sandbox Code Playgroud)
数据库方案生成器为具有中间表的代码生成良好的方案,并且所有工作都很好,直到我使用多对多.
所以我在一个请求中添加组:
user.groups.add(UserGroup.find.byId(groupId));
user.update();
Run Code Online (Sandbox Code Playgroud)
并尝试将它们输出到另一个System.out:
System.out.println(user.groups);
Run Code Online (Sandbox Code Playgroud)
这会返回:
BeanSet推迟
快速搜索显示BeanSet是来自Ebean的延迟加载容器.但似乎它没有以适当的方式工作或我错过了重要的事情.
关于我做错了什么,有什么想法吗?
我是Scala的新手,但有一些Java背景.
在编写Scala代码时,以这种样式处理Option参数很有用:
val text = Option("Text")
val length = text.map(s => s.size)
Run Code Online (Sandbox Code Playgroud)
但s => s.size
据我所知,每一个都带来了新的Function1[A, B]
.如果我做了8次这样的转换,它将带来8个额外的类.绑定表单时,我非常重视这些片段,所以问题是:
我应该少用它,也许用if-notation代替它,或者类似泛滥对JVM不是很关键,或者Scala编译器可能会做某种魔术?
更新:一个更具体的例子是:
case class Form(name: Option[String], surname: Option[String])
val bindedForm = Form(Option("John"), Option("Smith"))
val person = new Person
bindedForm.name.foreach(a => person.setName(a))
bindedForm.surname.foreach(a => person.setSurname(a))
Run Code Online (Sandbox Code Playgroud)
它会产生两个不同的Function1[String, String]
类吗?如果有数百次此类转换怎么办?
我使用play 2.0.1开发小应用程序,并使用内部H2数据库找到非常有用的用于进行客户预览.数据库中只有几行,一个或两个用户.在我的笔记本电脑中编译应用程序并在测试服务器上部署tar是非常舒服的.但看起来H2不时下降.我在application.log中找到了这个:
!@ 6anj14ljo - 内部服务器错误,请求[POST/admin] - >
play.core.ActionInvoker $$ anonfun $ receive $ 1 $$ anon $ 1:执行异常[[PersistenceException:Query抛出SQLException:表"MANAGER"未找到.
我知道使用H2进行生产并不是一个好主意.但我不想每次都配置mysql.这种H2行为的原因是什么?
scala ×3
ebean ×2
javascript ×2
scons ×2
akka ×1
c++ ×1
es6-promise ×1
express ×1
h2 ×1
jpa ×1
lombok ×1
many-to-many ×1
mercurial ×1
netbeans ×1
node.js ×1
reactjs ×1
sbt ×1
scala-2.10 ×1