小编Yan*_* Bo的帖子

为什么`private val`和`private final val`不同?

我曾经认为private val并且private final val相同,直到我在Scala参考中看到4.1节:

形式是常量值定义

final val x = e
Run Code Online (Sandbox Code Playgroud)

其中e是常数表达式(§6.24).必须存在最终修饰符,并且不能给出类型注释.对常量值x的引用本身被视为常量表达式; 在生成的代码中,它们被定义的右侧e替换.

我写了一个测试:

class PrivateVal {
  private val privateVal = 0
  def testPrivateVal = privateVal
  private final val privateFinalVal = 1
  def testPrivateFinalVal = privateFinalVal
}
Run Code Online (Sandbox Code Playgroud)

javap -c 输出:

Compiled from "PrivateVal.scala"
public class PrivateVal {
  public int testPrivateVal();
    Code:
       0: aload_0       
       1: invokespecial #19                 // Method privateVal:()I
       4: ireturn       

  public int testPrivateFinalVal();
    Code:
       0: iconst_1      
       1: ireturn       

  public PrivateVal();
    Code:
       0: aload_0       
       1: invokespecial #24 …
Run Code Online (Sandbox Code Playgroud)

scala final private

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

与scalaz.ContT相比,scalaz.concurrent.Future有什么好处[Trampoline,Unit,?]

我一直在寻找异步操作的数据类型.

我发现除此之外还scalaz.ContT[Trampoline, Unit, ?]支持所有功能.scalaz.concurrent.FutureBindRec

虽然,也有更多的实用程序scalaz.concurrent.Futurescalaz.ContT[Trampoline, Unit, ?],比如一个应用型实例运行期货并行.

我认为这些实用程序也可以实现ContT[Trampoline, Unit, ?].

为什么作者创建一个新Futurescalaz-concurrent库而不是重用ContT

concurrency continuations scala future scalaz

8
推荐指数
1
解决办法
387
查看次数

protobuf的最佳文件命名风格是什么?

有一个风格指南协议缓冲区.但它没有明确说明.proto文件应该如何命名.

MyProtos.proto,my_protos.proto或者my-protos.proto,这是更好的名字?

naming coding-style naming-conventions protocol-buffers

7
推荐指数
2
解决办法
2862
查看次数

注册的回调函数运行时,dcbFreeCallback是否安全?

我正在使用lwjgl 3提供的OpenCL Java绑定.

当我调用时clSetEventCallback,我必须传递一个回调函数 clSetEventCallback.对于每一个clSetEventCallback电话,我从LWJGL的创建了一个新的回调函数CLEventCallback.create,最终调用dyncalldcbNewCallback().

CLEventCallback myCallback = CLEventCallback.create(new CLEventCallbackI {
  ...
});
clSetEventCallback(..., myCallback, ...);
Run Code Online (Sandbox Code Playgroud)

由于我传递给的回调函数clSetEventCallback将只被评估一次,我想在OpenCL调用它时将其销毁.

@Override
public void invoke(long event, int status, long user_data) {
  myCallback.close();
}
Run Code Online (Sandbox Code Playgroud)

myCallback.close()由LWJGL提供,这将最终调用dyncalldcbFreeCallback().

上面的代码对我来说运行良好.

我想如果为所有CPU dyncall创建JMP类似指令,那么它是安全的.

但是,我没有找到任何dyncall允许dcbFreeCallback()在注册的回调函数运行时进行调用的文档.

那么,它在所有平台上都能保证安全吗?

java memory-management lwjgl opencl dyncall

6
推荐指数
0
解决办法
97
查看次数

尝试以非root用户身份从容器内部写入已装入的卷时出现问题

我正在使用一个将运行ZooKeeper的容器,但是我遇到了关于我装入容器的主机卷的权限问题.

这是我的设置:

在主机上(Ubuntu 14.04):

  • 创建了"zookeeper"系统用户(id = 106)和组(id = 111).
  • 创建目录"/ var/log/zookeeper"并将其所有权设置为zookeeper(即chown zookeeper:zookeeper).这是我将安装到容器中的目录.

容器内部(Ubuntu 14.04):

  • 还创建了一个"zookeeper"系统用户(id = 102)和group(id = 105),我将其用作在ENTRYPOINT中执行命令的用户.
  • 创建将要挂载的相同目录"/ var/log/zookeeper",并将其所有权设置为zookeeper:zookeeper(虽然我认为这不重要).

一旦我使用/ var/log/zookeeper mount启动我的容器,我在容器内部打开一个shell作为zookeeper用户(在容器内创建),我发现我得到一个"Permission Denied"错误,如果我尝试在挂载目录/ var/log/zookeeper中创建一个文件.当我执行"ls -l"查看此目录的所有权(仍然在容器内)时,它看起来像这样:

drwxr-xr-x 2  106  111   4096 Jun 30 17:18 zookeeper
Run Code Online (Sandbox Code Playgroud)

在这种情况下,106和111对应于主机的zookeeper用户和组ID,我认为这是问题所在.我尝试在容器内部打开一个shell,但这次我以root用户身份进入,上面描述的场景完全正常,只是root是创建的文件的所有者(这是预期的).

由此我得出结论,我需要:

(a)在我的容器内运行应用程序作为默认的root用户,而不是我创建的zookeeper用户.

(b)在我的主机上和id完全相同的容器内创建一个zookeeper用户和组.

这两种情况都不理想,因为对于(a),以root用户身份运行应用程序可能存在潜在的安全问题(从我已经阅读过的内容),对于(b),要使id匹配到期可能非常困难事实上,他们可能已被其他已创建的用户(您无法控制)使用.

有没有人曾经处理过这样的事情?我可能会忽略其他可能的解决方案吗?

permissions docker ubuntu-14.04 apache-zookeeper

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

如何在Scala中定义一个存在性更高的kinded类型

我试图定义一个在Scala中接受存在性更高的kinded类型的类型.

不幸的是,Scalac不允许这样做.

Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :paste
// Entering paste mode (ctrl-D to finish)

trait H[F[_, _]]
trait T[A, B]
val h:H[T] = null
val e:H[F] forSome { type F[A, B] } = h

// Exiting paste mode, now interpreting.

<console>:13: error: type mismatch;
 found   : H[T]
 required: H[_[A, B] <: Any]
Note: T <: Any, but trait H …
Run Code Online (Sandbox Code Playgroud)

type-systems functional-programming scala existential-type higher-kinded-types

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

如何检测当前脚本是否在 docker 构建中运行?

假设我有一个Dockerfile运行脚本的程序,

RUN ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

我怎样才能编写以便它可以检测自身是否在 a 期间myscript.sh由命令启动?RUNdocker build

RUN ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

理想情况下,它不需要对 进行任何更改Dockerfile,以便 的调用者myscript.sh不需要有关 的专业知识myscript.sh

linux bash shell docker dockerfile

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

为什么伊德里斯没有涉及"减去"类型检查的平等?

为什么不会出现以下类型的问题:

minusReduces : (n : Nat) -> n `minus` Z = n
minusReduces n = Refl
Run Code Online (Sandbox Code Playgroud)

然而,这将很好地检查:

plusReduces : (n : Nat) -> Z `plus` n = n
plusReduces n = Refl
Run Code Online (Sandbox Code Playgroud)

dependent-type idris

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

使用Binding.scala时,出现错误“每条指令必须在SDE块内”,我该如何解决?

当我使用Binding.scala时,我想div根据源数据创建一些someCollection

val someCollection = Seq("foo", "bar")
someCollection.map { item =>
  <div>{item.bind}</div>
}
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了编译器错误each instructions must be inside a SDE block

我怎样才能解决这个问题?

data-binding dom scala web-frontend binding.scala

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

使用Binding.scala宏注释时如何在编辑器中抑制intellij IDEA错误?

尽管它在sbt控制台中编译并运行.Intellij抱怨我应该在编辑器中使用Binding [Node]而不是Elem.

@dom def renderDiv: Binding[Div] = <div>...</div>
Run Code Online (Sandbox Code Playgroud)

从intellij IDEA的角度来看,此方法返回的Elem是一个子类型scala.xml.Node,但在渲染时:

dom.render(document.getElementById("root"),renderDiv)
Run Code Online (Sandbox Code Playgroud)

它需要一个org.scalajs.dom.raw.Node.

这有什么解决方法吗?

dom scala web-frontend scala.js binding.scala

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

为什么Scala编译器禁止声明通配符类型作为类型参数的超类型

我试图创建一个与依赖类型相关的类型别名_ >: a.type.

Scala编译器报告了一个我不理解的错误:

scala> def foo[A](a: A) = {
     |   type F = Function1[_ >: a.type, Unit]
     | } 
<console>:12: error: type mismatch;
 found   : a.type (with underlying type A)
 required: AnyRef
Note that A is unbounded, which means AnyRef is not a known parent.
Such types can participate in value classes, but instances
cannot appear in singleton types or in reference comparisons.
         type F = Function1[_ >: a.type, Unit]
                                 ^
Run Code Online (Sandbox Code Playgroud)

如果我替换a: Aa: A …

scala existential-type type-parameter type-bounds dependent-type

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

为什么//*[1]与(//*)[1]不同

我创建了两个文件,input.xmlformatter.xslt.

input.xml中:

<?xml-stylesheet type="text/xsl" href="formatter.xslt"?>
<div><span>1</span><span>2</span></div>
Run Code Online (Sandbox Code Playgroud)

formatter.xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html><head></head><body>
            <xsl:copy-of select="//*[1]"/>
            ,
            <xsl:copy-of select="(//*)[1]"/>
        </body></html>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

然后我input.xml在Internet Explorer中打开,然后按下F12.我看到DOM树是这样的:

<html><head></head><body>
    <div><span>1</span><span>2</span></div><span>1</span>
    ,
    <div><span>1</span><span>2</span></div>
</body></html>
Run Code Online (Sandbox Code Playgroud)

为什么//*[1](//*)[1]复制不同的元素到输出文件?

xml xslt xpath xquery

0
推荐指数
1
解决办法
57
查看次数