小编Fra*_*eil的帖子

如何克隆案例类实例并在Scala中只更改一个字段?

假设我有一个代表角色的案例类,不同社交网络上的人.该类的实例是完全不可变的,并且保存在不可变集合中,最终由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

205
推荐指数
3
解决办法
6万
查看次数

如何模式匹配Scala中的多个值?

假设我想使用相同的代码处理来自远程服务的多个返回值.我不知道如何在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)

请注意,我简化了示例,因此我不想在正则表达式上进行模式匹配等.匹配值实际上是复数值.

scala pattern-matching

82
推荐指数
1
解决办法
4万
查看次数

在Devise on Rails beta 3中创建管理员用户

好吧,当有人用一个我想念的简单的东西回答这个问题时,我可能会感到非常愚蠢但是...这里有:

我在rails 3 beta上有一个全新的应用程序,我正在使用设计进行身份验证.我已经完成了所有评论,目前一切都很完美.我已经创建了一个用户角色和一个管理员角色(遵循这些说明:https://github.com/plataformatec/devise/wiki/How-To : -Add- an-Admin- Role)我已将自己注册为第一个用户,但如何注册或创建管理员角色用户?来自设计人员的指示设置管理员角色不可注册但我不确定如果你不能注册你应该如何创建管理员?!

任何帮助,将不胜感激!谢谢!

ruby-on-rails devise

44
推荐指数
3
解决办法
3万
查看次数

nginx没有提供我的error_page

我有一个用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,我在错误时收到的页面仍然是"内部服务器错误".

我的错误是什么?

nginx custom-error-pages

41
推荐指数
3
解决办法
4万
查看次数

如何在Scala中阅读gzip文件

在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)

scala

29
推荐指数
2
解决办法
1万
查看次数

ruby require_relative给出了LoadError:无法推断IRB中的basepath

我现在在

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)

ruby require

19
推荐指数
2
解决办法
2万
查看次数

如何在spray-json中表示可选字段?

我的请求中有一个可选字段:

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会跳过该字段.

scala spray-json

16
推荐指数
3
解决办法
1万
查看次数

如何在不初始化的情况下检查是否初始化了lazy val?

是否有可能确定是否初始化了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)

scala

16
推荐指数
1
解决办法
4531
查看次数

如何在Python中指出无效参数?

可能重复:
python:我应该使用ValueError还是创建自己的子类来处理无效字符串?

阅读内置异常我读到:

所有用户定义的异常也应该从这个类派生"关于异常.

我还看到一个ValueError,它说:

当内置操作或函数接收到具有正确类型但不适当值的参数时引发,并且情况不会由更准确的异常(如IndexError)描述.

如果我想为无效参数引发异常(相当于Ruby的ArgumentError),我该怎么办?我应该ValueError直接提出,或者最好是以我自己的意图揭示名称来继承ValueError吗?

在我的例子中,我接受一个关键参数,但我想限制键中的字符集,这样只/\A[\w.]+\Z/接受(Perl/Ruby正则表达式).

python exception

12
推荐指数
1
解决办法
1万
查看次数

防止Backbone pushState上的整页重新加载

我正在尝试使用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)

backbone.js

12
推荐指数
3
解决办法
2万
查看次数