相关疑难解决方法(0)

可以通过引用来调用Scala吗?

我知道Scala支持来自ALGOL的call-by-name,我想我明白这意味着什么,但Scala可以像C#,VB.NET和C++那样通过引用进行调用吗?我知道Java不能通过引用进行调用,但我不确定这种限制是否仅仅是由于语言还是JVM.

当您想要将大量数据结构传递给方法但是您不想复制它时,这将非常有用.在这种情况下,按引用调用似乎是完美的.

scala calling-convention evaluation-strategy

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

Scala中的call-by-name与Haskell中的懒惰评估?

Haskell的懒惰评估永远不会比急切的评估采取更多的评估步骤.

另一方面,Scala的逐个名称评估可能需要比按值调用更多的评估步骤(如果短路效益大于由重复计算的成本抵消).

我认为按名称呼叫大致相当于懒惰的评估.为什么那么时间上的这种差异保证了?

我猜测也许Haskell语言指定在评估期间必须使用memoization; 但在那种情况下,为什么Scala不这样做呢?

evaluation haskell scala lazy-evaluation

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

如何编译Scala Hello World应用程序

我是Scala的新手,我之前从未编写或编译过程序.我正在尝试简单地运行以下Hello World示例,我将其保存在文件名scalaApp.scala中

object scalaApp extends App {
    def main(args: Array[String]) {
      println("Hello, world!")
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在文件目录中的终端并键入"scalac scalaApp.scala"时,我收到以下错误消息:

scalaApp.scala:4: error: overriding method main in trait App of type (args:    Array[String])Unit;
 method main needs `override' modifier
    def main(args: Array[String]) {
        ^
one error found
Run Code Online (Sandbox Code Playgroud)

我以为我已按照所有指示在我的计算机上正确安装Scala 2.10.3,但我不知道如何测试它,因为我甚至无法编译这个简单的程序.如果我在终端输入"scala",我会得到一个scala提示符,我可以在其上运行"1 + 1"之类的命令.我不确定这表明了多少.我已将SCALA_HOME变量添加到〜/ .profile,并将SCALA_HOME添加到〜/ .profile中的PATH变量中.如果有人能告诉我我做错了什么,或者给我一个关于我可能找到答案的建议,我会很感激.

scala scalac

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

Scala如何区分()=> T和=> T.

我的另一个问题是重复的,所以我会再试一次.我也读过这个问题,我问的是不同的.我有兴趣学习内部实现的Call-by-Name: => Type不同之处() => Type.

我的困惑来自于查看javap和cfr反汇编,这两个案例没有区别.

例如ParamTest.scala:

object ParamTest {
  def bar(x: Int, y: => Int) : Int = if (x > 0) y else 10
  def baz(x: Int, f: () => Int) : Int = if (x > 0) f() else 20
}
Run Code Online (Sandbox Code Playgroud)

javap输出 javap ParamTest.scala:

public final class ParamTest {
  public static int baz(int, scala.Function0<java.lang.Object>);
  public static int bar(int, scala.Function0<java.lang.Object>);
}
Run Code Online (Sandbox Code Playgroud)

CFR反编译输出 java -jar cfr_0_118.jar …

java scala

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

何时使用call-by-name和call-by-value?

我理解按名称和按值调用的基本概念,我也研究了一些例子.但是,我不清楚何时使用call-by-name.什么是真实世界的场景,其中call-by-name相对于其他呼叫类型具有显着的优势或性能提升?在设计方法时选择呼叫类型的正确思维方法应该是什么?

scala

8
推荐指数
3
解决办法
2106
查看次数

使用并行集合时批量执行哪些操作?这里奇怪的行为

在Scala REPL中输入以下小顺序程序及其并行化版本:

/* Activate time measurement in "App" class. Prints [total <X> ms] on exit. */
util.Properties.setProp("scala.time", "true")
/* Define sequential program version. */
object X extends App { for (x <- (1 to 10)) {Thread.sleep(1000);println(x)}}
/* Define parallel program version. Note '.par' selector on Range here. */
object Y extends App { for (y <- (1 to 10).par) {Thread.sleep(1000);println(y)}}
Run Code Online (Sandbox Code Playgroud)

执行X with X.main(Array.empty)给出:

1
2
3
4
5
6
7
8
9
10
[total 10002ms]
Run Code Online (Sandbox Code Playgroud)

而Y与Y.main(Array.empty)给出:

1 …
Run Code Online (Sandbox Code Playgroud)

parallel-processing scala scala-collections

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

Scala中:::(三重冒号)的用法是什么?

我是scala的新手.我遇到了一个概念,如下所示:

{ val x = a; b.:::(x) }   
Run Code Online (Sandbox Code Playgroud)

在这个块中,仍然在b之前评估a,然后将该评估的结果作为操作数传递给b的:::方法

上述声明的含义是什么..
我试过如下:

var a = 10
var b = 20
我应该期待什么结果.
有人可以举个例子......

提前致谢....

scala

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

按需调用的简单示例

我正试图理解"按需召唤"背后的定理.我理解这个定义,但我有点困惑.我想看一个简单的例子,它显示了按需调用的方式.

在阅读了一些以前的线程之后,我发现Haskell使用了这种评估.是否有其他编程语言支持此功能?

我读到了Scala的名字调用,我确实知道按名称调用和按需调用是相似的,但由于需要调用将保持评估值这一事实不同.但我真的很想看到一个真实的例子(它没有必须在Haskell),这表明调用 - 需要.

haskell r lazy-evaluation call-by-need

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