假设我有一个代表角色的案例类,不同社交网络上的人.该类的实例是完全不可变的,并且保存在不可变集合中,最终由Akka actor修改.
现在,我有一个包含许多字段的case类,我收到一条消息,说我必须更新其中一个字段,如下所示:
case class Persona(serviceName : String,
serviceId : String,
sentMessages : Set[String])
// Somewhere deep in an actor
val newPersona = Persona(existingPersona.serviceName,
existingPersona.serviceId,
existingPersona.sentMessages + newMessage)
Run Code Online (Sandbox Code Playgroud)
注意我必须指定所有字段,即使只有一个更改.有没有办法克隆existingPersona并只替换一个字段,而不指定所有不更改的字段?我可以将其作为特征编写并将其用于我的所有案例类吗?
如果Persona是一个类似Map的实例,那么很容易做到.
假设我想使用相同的代码处理来自远程服务的多个返回值.我不知道如何在Scala中表达这一点:
code match {
case "1" => // Whatever
case "2" => // Same whatever
case "3" => // Ah, something different
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用Extract Method并调用它,但是在调用中仍然有重复.如果我使用Ruby,我会这样写:
case code
when "1", "2"
# Whatever
when "3"
# Ah, something different
end
Run Code Online (Sandbox Code Playgroud)
请注意,我简化了示例,因此我不想在正则表达式上进行模式匹配等.匹配值实际上是复数值.
好吧,当有人用一个我想念的简单的东西回答这个问题时,我可能会感到非常愚蠢但是...这里有:
我在rails 3 beta上有一个全新的应用程序,我正在使用设计进行身份验证.我已经完成了所有评论,目前一切都很完美.我已经创建了一个用户角色和一个管理员角色(遵循这些说明:https://github.com/plataformatec/devise/wiki/How-To : -Add- an-Admin- Role)我已将自己注册为第一个用户,但如何注册或创建管理员角色用户?来自设计人员的指示设置管理员角色不可注册但我不确定如果你不能注册你应该如何创建管理员?!
任何帮助,将不胜感激!谢谢!
我有一个用Unicorn托管的Sinatra应用程序,在它前面有nginx.当Sinatra应用程序出错(返回500)时,我想提供一个静态页面,而不是默认的"内部服务器错误".我有以下nginx配置:
server {
listen 80 default;
server_name *.example.com;
root /home/deploy/www-frontend/current/public;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_pass http://127.0.0.1:4701/;
}
error_page 500 502 503 504 /50x.html;
}
Run Code Online (Sandbox Code Playgroud)
error_page指令在那里,我有sudo'd作为www-data(Ubuntu)并验证我可以cat
文件,因此它不是权限问题.使用上面的配置文件,并且service nginx reload
,我在错误时收到的页面仍然是"内部服务器错误".
我的错误是什么?
在Java中,我将GZIPInputStream包装在FileInputStream上并完成.如何在Scala中完成等效操作?
Source.fromFile("a.csv.gz")....
Run Code Online (Sandbox Code Playgroud)
fromFile返回一个BufferedSource,它真的想要将世界视为一个行集合.
有没有比这更优雅的方式?
Source.fromInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream("a.csv.gz"))))
Run Code Online (Sandbox Code Playgroud) 我现在在
Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day/units/
Run Code Online (Sandbox Code Playgroud)
我可以进入irb并需要一个文件,但这是一个很长的要求......
require '/home/durrantm/Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day/units/login_as_admin_spec.rb'
=> true
Run Code Online (Sandbox Code Playgroud)
我想使用require_relative,如
$ cd /home/durrantm/Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day/
$ pwd
/home/durrantm/Dropbox/96_2013/work/ror/dmc/dmStaffing/QA/selenium_server_wyatt/spec/2day
$ irb
irb(main):001:0> require_relative 'units/login_as_admin_spec.rb'
Run Code Online (Sandbox Code Playgroud)
但我得到:
LoadError: cannot infer basepath
Run Code Online (Sandbox Code Playgroud) 我的请求中有一个可选字段:
case class SearchRequest(url: String, nextAt: Option[Date])
Run Code Online (Sandbox Code Playgroud)
我的协议是:
object SearchRequestJsonProtocol extends DefaultJsonProtocol {
implicit val searchRequestFormat = jsonFormat(SearchRequest, "url", "nextAt")
}
Run Code Online (Sandbox Code Playgroud)
如何将nextAt字段标记为可选,以便正确读取和接受以下JSON对象:
{"url":"..."}
{"url":"...", "nextAt":null}
{"url":"...", "nextAt":"2012-05-30T15:23Z"}
Run Code Online (Sandbox Code Playgroud)
我实际上并不关心null的情况,但如果你有细节,那就太好了.我正在使用spray-json,并且认为如果原始JSON对象上没有该选项,则使用Option会跳过该字段.
是否有可能确定是否初始化了lazy val而没有初始化它?
object TheApp {
lazy val optionalSubsystem = {
// ...
subsystem
}
def main(args: Array[String]) {
bootSubsystemA(this)
bootSubsystemB(this)
if (/* optionalSubsystem is initialized */) {
// more dependencies
}
}
}
Run Code Online (Sandbox Code Playgroud) 阅读内置异常我读到:
所有用户定义的异常也应该从这个类派生"关于异常.
我还看到一个ValueError,它说:
当内置操作或函数接收到具有正确类型但不适当值的参数时引发,并且情况不会由更准确的异常(如IndexError)描述.
如果我想为无效参数引发异常(相当于Ruby的ArgumentError),我该怎么办?我应该ValueError
直接提出,或者最好是以我自己的意图揭示名称来继承ValueError吗?
在我的例子中,我接受一个关键参数,但我想限制键中的字符集,这样只/\A[\w.]+\Z/
接受(Perl/Ruby正则表达式).
我正在尝试使用Backbone的pushState阻止整页重新加载.当我从视图的事件中调用navigate()时,我看到下面标记为// 1但不是// 2的消息.此外,当我尝试打开相同的选项卡时,页面会再次重新加载.
我必须自己停止活动吗?我尝试使用jQuery的preventDefault(),它确实阻止了页面重新加载,但我没有在任何地方看到过这种情况.
以下是我目前的代码:
App.Router = Backbone.Router.extend({
routes:{
"analytics":"analytics"
, "realtime":"realtime"
}
, analytics:function(page) {
console.log("analytics route hit: %o", page); // 2
}
, realtime:function(page) {
console.log("realtime route hit: %o", page); // 2
}
});
App.TabSetView = Backbone.View.extend({
initialize:function() {
this.collection.bind("reset", this.render, this);
this.collection.bind("add", this.render, this);
this.collection.bind("change", this.render, this);
this.collection.bind("remove", this.render, this);
}
, events:{
'click li.realtime a': "onRealtime"
, 'click li.analytics a': "onAnalytics"
}
, render:function() {
// omitted for brevity
}
, onAnalytics:function() {
console.log("onAnalytics"); // 1 …
Run Code Online (Sandbox Code Playgroud) scala ×5
backbone.js ×1
devise ×1
exception ×1
nginx ×1
python ×1
require ×1
ruby ×1
spray-json ×1