小编ama*_*emi的帖子

Scala在匿名函数中返回语句

为什么return匿名函数中的显式返回语句(使用关键字的语句)从封闭的命名函数返回,而不仅仅是来自匿名函数本身?

例如,以下程序导致类型错误:

def foo: String = {
  ((x: Integer) => return x)
  "foo"
}
Run Code Online (Sandbox Code Playgroud)

我知道建议避免使用return关键字,但我很感兴趣为什么显式和隐式返回语句在匿名函数中具有不同的语义.

在下面的示例中,return语句m在执行完毕后"幸存" ,并且程序导致运行时异常.如果匿名函数没有从封闭函数返回,则无法编译该代码.

def main(args: Array[String]) {
  m(3)
}

def m: (Integer => Unit) =
  (x: Integer) => return (y: Integer) => 2
Run Code Online (Sandbox Code Playgroud)

closures scala return anonymous-function

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

Coq中不同类型的重载符号

我希望能够为不同的归纳定义定义相同的Coq表示法,并根据其参数类型区分这些表示法。

这是一个最小的示例:

Inductive type : Type :=
| TBool : type.

Inductive term1 : Type :=
| tvar1 : term1.

Inductive term2 : Type :=
| tvar2 : term2.

Definition context := nat -> (option type).

Reserved Notation "G '?' t '::' T" (at level 40, t at level 59).

Inductive typing1 : context -> term1 -> type -> Prop :=
 | T_Var1 : forall G T,
      G ? tvar1 :: T
where "G '?' t1 '::' T" := (typing1 …
Run Code Online (Sandbox Code Playgroud)

coq

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

获取Scala中"超级"调用引用的符号

我正在为refchecks阶段编写一个Scala编译器插件.

如何访问的符号,一个"超级"的呼叫是指,考虑调用点的象征?

例如,在

trait A {
  def m() {}
}

trait B extends A {
  def m() { super.m() }
}
Run Code Online (Sandbox Code Playgroud)

知道了呼叫站点的符号super.m(),我想获得特征的符号A.

compiler-construction static-analysis scala scala-compiler

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

强制Scala特性实现某种方法

有没有办法指定特征必须提供方法的具体实现?

鉴于一些mixin

class A extends B with C {
  foo()
}
Run Code Online (Sandbox Code Playgroud)

如果是,或者实现A,程序将编译.但是,我们怎么能强迫,例如,包含实施?BCfoo()Bfoo

scala traits mixins

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