我正在使用节点v0.12.4.当我运行以下代码时,node --max-old-space-size=8192 test.js
它给了我错误FATAL ERROR: invalid array length Allocation failed - process out of memory
var a = new Array(200000000);
console.log(a.length);
Run Code Online (Sandbox Code Playgroud)
但是,如果我将大小更改为300000000,我不会收到任何错误.这里发生了什么?除了--max-old-space-size
我需要改变之外还有一些命令行参数吗?
为什么这不起作用?
val f = (args: Int*) => args.sum
error: ')' expected but identifier found.
val f = (args: Int*) => args.sum
^
Run Code Online (Sandbox Code Playgroud)
然而,这非常好
def sum(args: Int*) = args.sum
val f = sum _
Run Code Online (Sandbox Code Playgroud)
这样做
val f: (Int*) => Int = args => args.sum
Run Code Online (Sandbox Code Playgroud)
顺便说一句.我正在使用scala 2.9.1
去年谷歌发布了一个比较C++,Java,Scala和Go的基准. http://readwrite.com/2011/06/06/cpp-go-java-scala-performance-benchmark 表中的结果看起来很可疑,所以我从https://code.google.com/下载了代码p /多语言工作台/源/结账并自己运行代码.奇怪的是,我的数字非常不同.我没有以任何方式修改代码.刚编译并运行它.根据谷歌的运行时间(秒)是:
C++ - 23
Java 64bit - 134
Scala - 82
Run Code Online (Sandbox Code Playgroud)
但是在我的机器上我得到了
C++ - 13
Java - 14
Scala - 17
Run Code Online (Sandbox Code Playgroud)
速度差异小得多.现在我想知道,这只是因为谷歌在去年改进了这些基准的代码吗?或者它可能与JVM的改进有关?顺便说一句.我使用Java 1.7.0 64位,Scala 2.10.0-RC2和带-O2的gcc 4.7.0
为什么这段代码会抛出异常?
val x = new { def toInt(n: Int) = n*2 }
x.toInt(2)
scala.tools.nsc.symtab.Types$TypeError: too many arguments for method toInteger: (x$1: java.lang.Object)java.lang.Integer
at scala.tools.nsc.typechecker.Contexts$Context.error(Contexts.scala:298)
at scala.tools.nsc.typechecker.Infer$Inferencer.error(Infer.scala:207)
at scala.tools.nsc.typechecker.Infer$Inferencer.errorTree(Infer.scala:211)
at scala.tools.nsc.typechecker.Typers$Typer.tryNamesDefaults$1(Typers.scala:2350)
...
Run Code Online (Sandbox Code Playgroud)
我正在使用scala 2.9.1.final
我想知道是否有更好的方法在scala中编写递归循环.
def fib(n: Int) = {
def loop(a: BigInt = 0, b: BigInt = 1, n: Int = n): BigInt = {
if(n==0) a
else loop(b, a+b, n-1)
}
loop()
}
Run Code Online (Sandbox Code Playgroud)
我可以这样写
def fib(n: Int, a: BigInt = 0, b: BigInt = 1): BigInt = {
if(n==0) a
else fib(n-1, b, a+b)
}
Run Code Online (Sandbox Code Playgroud)
但是然后a和b将被曝光并且不再封装在方法内部.
如何使用js命令行编译器?
fun main(args: Array<String>): Unit {
println("Hello world!")
}
E:\kotlinc\bin>kotlinc-js -output test -sourceFiles test.kt
ERROR: E:\kotlinc\bin\test.kt: (4, 5) Unresolved reference: println
exec() finished with COMPILATION_ERROR return code
Run Code Online (Sandbox Code Playgroud)
在 IDE 中我也无法让 js 编译工作。是否有 IntelliJ IDEA 12 的最新入门指南?
有没有办法用泛型来概括这个代码?
object ListInt {
def unapply(o: Any): Option[List[Int]] = o match {
case lst: List[_] if(lst.forall(_.isInstanceOf[Int])) =>
Some(lst.asInstanceOf[List[Int]])
case _ => None
}
}
object ListDouble {
def unapply(o: Any): Option[List[Double]] = o match {
case lst: List[_] if(lst.forall(_.isInstanceOf[Double])) =>
Some(lst.asInstanceOf[List[Double]])
case _ => None
}
}
object ListString {
def unapply(o: Any): Option[List[String]] = o match {
case lst: List[_] if(lst.forall(_.isInstanceOf[String])) =>
Some(lst.asInstanceOf[List[String]])
case _ => None
}
}
val o: Any = List("a", "b", "c")
o match { …
Run Code Online (Sandbox Code Playgroud) 此代码在Chrome上为3秒,在Firefox上为6秒.如果我用Java编写代码并在Java 7.0下运行它只需要10ms.Chrome的JS引擎通常非常快.为什么这么慢?顺便说一句.此代码仅用于测试.我知道写一个斐波那契函数不是很实用的方法
fib = function(n) {
if (n < 2) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
};
console.log(fib(32));
Run Code Online (Sandbox Code Playgroud) 为什么这段代码会产生错误
def test[A](a: List[A], f: A => A) = a.map(f)
println(test(List(1,2,3), _*2))
error: missing parameter type for expanded function ((x$2) => x$2.$times(2))
Run Code Online (Sandbox Code Playgroud)
Scala不应该告诉A是Int吗?
scala ×6
javascript ×2
benchmarking ×1
exception ×1
generics ×1
java ×1
kotlin ×1
node.js ×1
syntax ×1