Option
monad是一种很好的表达方式来处理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) 只要我们有一个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)
我错过了一些更好的方法吗?
我目前正在试验中发现的内核参数/proc/sys/vm
,特别是dirty_ratio
和dirty_background_ratio
.
内核doc对两者都有以下解释:
dirty_background_ratio
包含作为包含可用页面和可回收页面的总可用内存的百分比,后台内核刷新线程将开始写出脏数据的页面数.
和
dirty_ratio
包含作为包含空闲页面和可回收页面的总可用内存的百分比,生成磁盘写入的进程本身将开始写出脏数据的页面数.
我的linux系统dirty_background_ratio
是10并且dirty_ratio
是20.我明白不同之处在于脏数据写的是谁.因此,如果我的已用内存达到10%,则内核开始写回来,永远不会达到20%.
我现在的问题是:具有更高的价值dirty_background_ratio
和dirty_ratio
任何意义,还是仅仅是"什么是较低的价值和谁拥有它"?
我有一个带有两个块的ERB视图:
<%= test_h1 do %>
<%= 'test1' %>
<% end -%>
<%= test_h2 do %>
<%= 'test2' %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)
where test_h1
和test_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
?
一个想建立和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
我正在尝试使用名为“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)
但一切都失败了,我被重定向到默认页面。有没有人有关于如何解决这个问题的提示?
我正在构建一个应用程序,需要对 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/quwjDP4us
nginx 成功将我的请求重定向到我的应用程序,但不会在后台向 stats api 发出第二个请求。我缺少什么?
注意 -post_action
不包含在 nginx 文档中,是否有我可以使用的备用模块/指令?
nginx ×2
scala ×2
actionview ×1
docker ×1
either ×1
java ×1
linux ×1
linux-kernel ×1
performance ×1
proxy ×1
punycode ×1
scala-option ×1