我曾经认为private val并且private final val相同,直到我在Scala参考中看到4.1节:
形式是常量值定义
Run Code Online (Sandbox Code Playgroud)final val x = e其中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) 我一直在寻找异步操作的数据类型.
我发现除此之外还scalaz.ContT[Trampoline, Unit, ?]支持所有功能.scalaz.concurrent.FutureBindRec
虽然,也有更多的实用程序scalaz.concurrent.Future比scalaz.ContT[Trampoline, Unit, ?],比如一个应用型实例运行期货并行.
我认为这些实用程序也可以实现ContT[Trampoline, Unit, ?].
为什么作者创建一个新Future的scalaz-concurrent库而不是重用ContT?
我正在使用lwjgl 3提供的OpenCL Java绑定.
当我调用时clSetEventCallback,我必须传递一个回调函数 clSetEventCallback.对于每一个clSetEventCallback电话,我从LWJGL的创建了一个新的回调函数CLEventCallback.create,最终调用dyncall的dcbNewCallback().
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提供,这将最终调用dyncall的dcbFreeCallback().
上面的代码对我来说运行良好.
我想如果为所有CPU dyncall创建JMP类似指令,那么它是安全的.
但是,我没有找到任何dyncall允许dcbFreeCallback()在注册的回调函数运行时进行调用的文档.
那么,它在所有平台上都能保证安全吗?
我正在使用一个将运行ZooKeeper的容器,但是我遇到了关于我装入容器的主机卷的权限问题.
这是我的设置:
在主机上(Ubuntu 14.04):
容器内部(Ubuntu 14.04):
一旦我使用/ 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匹配到期可能非常困难事实上,他们可能已被其他已创建的用户(您无法控制)使用.
有没有人曾经处理过这样的事情?我可能会忽略其他可能的解决方案吗?
我试图定义一个在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
假设我有一个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。
为什么不会出现以下类型的问题:
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) 当我使用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。
我怎样才能解决这个问题?
尽管它在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.
这有什么解决方法吗?
我试图创建一个与依赖类型相关的类型别名_ >: 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: A为a: A …
scala existential-type type-parameter type-bounds dependent-type
我创建了两个文件,input.xml和formatter.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]复制不同的元素到输出文件?
scala ×6
docker ×2
dom ×2
web-frontend ×2
bash ×1
coding-style ×1
concurrency ×1
data-binding ×1
dockerfile ×1
dyncall ×1
final ×1
future ×1
idris ×1
java ×1
linux ×1
lwjgl ×1
naming ×1
opencl ×1
permissions ×1
private ×1
scala.js ×1
scalaz ×1
shell ×1
type-bounds ×1
type-systems ×1
ubuntu-14.04 ×1
xml ×1
xpath ×1
xquery ×1
xslt ×1