小编Ale*_*rov的帖子

使用Either处理Scala代码中的失败

Optionmonad是一种很好的表达方式来处理Scala中的某些东西或者什么都没有.但是如果在"无"发生时需要记录消息呢?根据Scala API文档,

Either类型通常用作scala.Option的替代,其中Left表示失败(按惯例),Right表示类似于Some.

但是,我没有运气找到使用Either的最佳实践或涉及处理失败的Either的良好实际示例.最后,我为自己的项目提出了以下代码:

    def logs: Array[String] = {
        def props: Option[Map[String, Any]] = configAdmin.map{ ca =>
            val config = ca.getConfiguration(PID, null)
            config.properties getOrElse immutable.Map.empty
        }
        def checkType(any: Any): Option[Array[String]] = any match {
            case a: Array[String] => Some(a)
            case _ => None
        }
        def lookup: Either[(Symbol, String), Array[String]] =
            for {val properties <- props.toRight('warning -> "ConfigurationAdmin service not bound").right
                 val logsParam <- properties.get("logs").toRight('debug -> "'logs' not defined in the configuration").right
                 val array <- checkType(logsParam).toRight('warning -> "unknown type of …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala either

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

如何将X => Option [R]转换为PartialFunction [X,R]

只要我们有一个PartialFunction[X,R]很容易将它转换为返回的函数Option[R],例如

def pfToOptf[X, R](f: PartialFunction[X,R])(x: X) =
    if (f.isDefinedAt(x)) Some(f(x))
    else None
Run Code Online (Sandbox Code Playgroud)

但是,如果任务相反,那该怎么办:假设我有一个函数作为参数f获取X并返回Option[R]结果.我想做出一个PartialFunction[X,R].什么是最好的方法?

我想出来的东西看起来很丑陋我的口味:

def optfToPf[X,R](f: X => Option[R]) : PartialFunction[X,R] = {
    object extractor {
        def unapply(x: X): Option[R] = f(x)
    }

    { case extractor(r) => r }
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些更好的方法吗?

scala partialfunction scala-option

22
推荐指数
3
解决办法
2588
查看次数

vm.dirty_ratio和vm.dirty_background_ratio之间的区别?

我目前正在试验中发现的内核参数/proc/sys/vm,特别是dirty_ratiodirty_background_ratio.

内核doc对两者都有以下解释:

dirty_background_ratio

包含作为包含可用页面和可回收页面的总可用内存的百分比,后台内核刷新线程将开始写出脏数据的页面数.

dirty_ratio

包含作为包含空闲页面和可回收页面的总可用内存的百分比,生成磁盘写入的进程本身将开始写出脏数据的页面数.

我的linux系统dirty_background_ratio是10并且dirty_ratio是20.我明白不同之处在于脏数据写的是谁.因此,如果我的已用内存达到10%,则内核开始写回来,永远不会达到20%.

我现在的问题是:具有更高的价值dirty_background_ratiodirty_ratio任何意义,还是仅仅是"什么是较低的价值和谁拥有它"?

linux performance linux-kernel

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

捕获Rails视图块时出现差异

我有一个带有两个块的ERB视图:

<%= test_h1 do %>
  <%= 'test1' %>
<% end -%>

<%= test_h2 do %>
  <%= 'test2' %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

where test_h1test_h2是类似的帮助器,但是一个在辅助文件中定义,而另一个helper_method在控制器中定义:

module TestHelper
  def test_h1(&block)
    link_to '/url' do
      capture(&block)
    end
  end
end

class TestController < ApplicationController
  helper_method :test_h2

  def test_h2(&block)
    helpers.link_to '/url' do
      helpers.capture(&block)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

test_h1生成预期结果并首先test_h2渲染内部模板块:

<a href="/url">test1</a>

test2<a href="/url"></a>
Run Code Online (Sandbox Code Playgroud)

为什么?什么是惯用的写作方式test_h2

ruby-on-rails actionview ruby-on-rails-5

7
推荐指数
1
解决办法
143
查看次数

Docker 中的 JRE 内存不足

一个想建立和SBT类似0.13.13搬运工像一个。运行java $JAVA_OPTS -jar sbt-launch.jar(作为构建映像的一个步骤)失败并显示:

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000d3026000, 451256320, 0) failed; error='Out of memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 451256320 bytes for committing 
reserved memory.
Run Code Online (Sandbox Code Playgroud)

增加-Xmx没有帮助。我能做些什么来解决这个问题?这是 Dockerfile:https : //github.com/kolov/k8s-stuff/blob/master/scala/Dockerfile

java docker docker-machine

6
推荐指数
1
解决办法
5262
查看次数

Nginx server_name 中的 Unicode 域名

我正在尝试使用名为“privatinstruktør.dk”的域名设置服务器,但一直被重定向到默认的“欢迎使用 nginx”页面。

我试图像这样输入 server_name :

server {
  listen 80;
  server_name privatinstruktør.dk;

  location / {
    root /var/www/privat;
  }
}
Run Code Online (Sandbox Code Playgroud)

但这没有用。所以我尝试使用正则表达式,如:

server_name "~^privatinstrukt(.+)r\.dk$";
Run Code Online (Sandbox Code Playgroud)

server_name "~^privatinstrukt(.*)r\.dk$";
Run Code Online (Sandbox Code Playgroud)

乃至

server_name "~^privat(.*)$";
Run Code Online (Sandbox Code Playgroud)

但一切都失败了,我被重定向到默认页面。有没有人有关于如何解决这个问题的提示?

nginx punycode

5
推荐指数
1
解决办法
2492
查看次数

配置 nginx 发出后台请求

我正在构建一个应用程序,需要对 api-数据组合使用情况进行一些分析。下面是我的 nginx 配置 -

location /r/ {
    rewrite /r/(.*)$ http://localhost:3000/sample/route1/$1 redirect;
    post_action /aftersampleroute1/$1;
}
location /aftersampleroute1/ {
    rewrite /aftersampleroute1/(.*) /stats/$1;
    proxy_pass http://127.0.0.1:3000;
}
Run Code Online (Sandbox Code Playgroud)

location/r/用于将浏览器请求重定向http://localhost:80/r/quwjDP4us到 api /sample/route1/quwjDP4us,该 api 使用 idquwjDP4us执行某些操作。现在在后台我想将 id 传递quwjDP4us给统计 api/stats/quwjDP4us,该 api 会更新该 id 的数据库记录。

当我启动 nginx 并发出请求时,http://localhost:80/r/quwjDP4usnginx 成功将我的请求重定向到我的应用程序,但不会在后台向 stats api 发出第二个请求。我缺少什么?

注意 -post_action不包含在 nginx 文档中,是否有我可以使用的备用模块/指令?

proxy nginx nginx-location nginx-reverse-proxy

5
推荐指数
1
解决办法
4620
查看次数