我想设置一个在盒子上运行的fsc进程,然后我可以远程访问它.
我知道我需要共享一个临时目录.
但是,我很难在笔记本电脑上使用它.
我尝试着:
fsc -Djava.io.tmpdir=/tempscala -server 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)
但它只是给了我使用选项......
救命?
我有这个小scala示例:
object Test {
def add(x: Int, y: Int) = {
val z = x - y
x match {
case 0 => 0 - y
case 1 => 1 - y
case _ => x - y
}
x + y
}
def main(args: Array[String]) {
println(add(5, 6))
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得scala应警告'z'和'x匹配......'未被使用.我没有注意到任何编译器选项可以打开更多警告.我正在使用scala 2.10.1.
思考?谢谢!
我最近注意到scala编译器警告maven生成的内容如下所示:
[警告]警告:有4个弃用警告; 使用-deprecation重新运行以获取详细信息
[警告]警告:有3个功能警告; 重新运行-feature以获取详细信息
[警告]发现两个警告
我没有立即明白如何遵循警告的说明,因此我可以获得有关如何更改代码的详细信息.
这个要点(这个Haskell无标记解释器的部分Scala端口)用scalac
2.11.1 编译,但是用新的 2.11.6 失败:
typechecker.scala:55: error: type mismatch;
found : Expr[B] where type B
required: Expr[Int]
case (lhs ::: RInt, rhs ::: RInt) => Add(lhs, rhs) ::: RInt
...
Run Code Online (Sandbox Code Playgroud)
如何scalac
通过模式匹配传播类型:::
?改变2.11.1
了2.11.6
什么?我试着寻找看的输出scalac -print
和scalac -Xprint-types
,但还没有发现他们有帮助.
请参阅要点以获取完整的代码,但是,粗略地说,我们有
// ADT for untyped expressions
sealed trait UExpr
case class UAdd(lhs: UExpr, rhs: UExpr) extends UExpr
// GADT for typed expressions
sealed trait Expr[T]
case class …
Run Code Online (Sandbox Code Playgroud) scala编译器是否通过将refs删除为val
仅在块中使用一次来优化内存使用?
想象一个对象保存一些巨大的数据 - 达到克隆数据或其衍生物可能会刮掉JVM /机器的最大内存量的大小.
一个最小的代码示例,但想象一下更长的数据转换链:
val huge: HugeObjectType
val derivative1 = huge.map(_.x)
val derivative2 = derivative1.groupBy(....)
Run Code Online (Sandbox Code Playgroud)
编译后的编译器是否会huge
标记为有资格进行垃圾收集derivative1
?或者它会保持活着,直到包裹块退出?
理论上不变性很好,我个人觉得它上瘾.但是要适应那些无法在当前操作系统上逐项进行流处理的大数据对象 - 我认为它本身就具有与合理内存利用率不匹配的阻抗,因为JVM上的大数据应用程序不是不,编译器会针对这种情况进行优化.
我正在读这个问题并看到:
scalac包括一个全武装和可操作战斗站的8位模拟器,可在GenICode编译阶段使用魔法组合键CTRL-ALT-F12进行查看.
为了显示编译阶段scalac
,我用过scalac -Xshow-phases
.
phase name id description
---------- -- -----------
< ... >
icode 23 generate portable intermediate code
Run Code Online (Sandbox Code Playgroud)
似乎是相关阶段.
我编译了一个Hello-world程序
object Hello {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}
Run Code Online (Sandbox Code Playgroud)
通过scalac Hello.scala
并按下CTRL-ALT-F12一路.没啥事儿.尝试scalac -Xprint:icode Hello.scala
使用CTRL-ALT-F12,没什么特别的.
如何触发模拟器?这有什么作用?
在scala 2.11.8和OS X 10.11.5上
显然Range
有一个方法可以检查它是否包含Any类型的值.我知道它来自SeqLike
,但会引起一些问题.
例如,我从joda.DateTime匹配小时:
DateTime.now match {
case d if 0 to 12 contains d.hourOfDay() => ...
Run Code Online (Sandbox Code Playgroud)
这里d.hourOfDay()返回DateTime.Property,而不是Int,但代码仍然编译,因为contains(elem: Any)
.有没有办法在编译时检查这样的调用?
scalax -Xlint help提供以下信息:
$ scalac -Xlint:help
Enable or disable specific warnings
adapted-args Warn if an argument list is modified to match the receiver.
nullary-unit Warn when nullary methods return Unit.
inaccessible Warn about inaccessible types in method signatures.
nullary-override Warn when non-nullary `def f()' overrides nullary `def f'.
infer-any Warn when a type argument is inferred to be `Any`.
missing-interpolator A string literal appears to be missing an interpolator id.
doc-detached A Scaladoc comment appears to be detached from its …
Run Code Online (Sandbox Code Playgroud) 我有一个 java 库方法需要一个类Void
作为参数。例如,在com.mongodb.async.client.MongoCollection
:
void insertOne(TDocument document, SingleResultCallback<Void> callback);
Run Code Online (Sandbox Code Playgroud)
我正在从 Scala 访问此方法。Scala 使用该类型Unit
作为等价物Void
(如果我错了请纠正我)
如何将 a SingleResultCallback[Unit]
(而不是SingleResultCallback[Void]
)传递给此方法?编译器不允许这样做。不应该捡这个吗?
这听起来像是一个新手错误,但我做了很多。在将惰性求值块或值传递给函数时,如果我忘记以某种方式使该函数的相应参数变为惰性(按名称传递/调用),乍一看会引起一些混乱,因为它强制求值。
lazy val a = {println("a");1}
def myfunc(b:Int){println("hello")}
myfunc(a);
Run Code Online (Sandbox Code Playgroud)
输出:
a
Hello
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,这个问题是否有任何编译器帮助?(标志等)或者这是我应该处理的事情?