标签: ascription

Scala中类型归属的目的是什么?

关于什么类型的归属,规范中没有太多信息,并且当然没有关于它的目的的任何信息.除了"使传递varargs工作",我会使用什么类型的归属?下面是一些scala REPL的语法和使用它的效果.

scala> val s = "Dave"
s: java.lang.String = Dave

scala> val p = s:Object
p: java.lang.Object = Dave

scala> p.length
<console>:7: error: value length is not a member of java.lang.Object
       p.length
         ^
scala> p.getClass
res10: java.lang.Class[_ <: java.lang.Object] = class java.lang.String

scala> s.getClass
res11: java.lang.Class[_ <: java.lang.Object] = class java.lang.String

scala> p.asInstanceOf[String].length
res9: Int = 4
Run Code Online (Sandbox Code Playgroud)

scala static-typing ascription

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

为什么id的类型不能专门用于(forall a.a - > a) - >(forall b.b - > b)?

在Haskell中采用简单的身份功能,

id :: forall a. a -> a
Run Code Online (Sandbox Code Playgroud)

鉴于Haskell据称支持impregicative多态性,我应该能够通过类型归属"限制" id到类型似乎是合理的(forall a. a -> a) -> (forall b. b -> b).但这不起作用:

Prelude> id :: (forall a. a -> a) -> (forall b. b -> b)

<interactive>:1:1:
    Couldn't match expected type `b -> b'
                with actual type `forall a. a -> a'
    Expected type: (forall a. a -> a) -> b -> b
      Actual type: (forall a. a -> a) -> forall a. a -> a
    In the expression: …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell impredicativetypes ascription

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

什么是类型归属?

有几次我使用了错误的语法,比如忘记let在这个例子中使用:

let closure_annotated = |value: i32| -> i32 {
    temp: i32 = fun(5i32);
    temp + value + 1
};
Run Code Online (Sandbox Code Playgroud)
error[E0658]: type ascription is experimental (see issue #23416)
 --> src/main.rs:3:9
  |
3 |         temp: i32 = fun(5i32);
  |         ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我知道这个问题已经解决了let,但有人可以解释一下"类型归属"是什么以及它有什么用途?

我找到问题#23416类型归属的功能门,但我找不到任何东西来理解什么是"类型归属",它的目的是什么.

syntax rust ascription

25
推荐指数
1
解决办法
7950
查看次数

为什么在嵌套迭代器上展平无法编译,为什么我需要类型归属?

(new Iterator[List[Int]] {
  def hasNext: Boolean = ???
  def next(): List[Int] = ???
}).flatten
Run Code Online (Sandbox Code Playgroud)

给出错误:

value flatten is not a member of Iterator[List[Int]]
[error] possible cause: maybe a semicolon is missing before `value flatten'?
[error]     }.flatten
[error]       ^
[error] one error found
Run Code Online (Sandbox Code Playgroud)

(new Iterator[List[Int]] {
  def hasNext: Boolean = ???
  def next(): List[Int] = ???
}: Iterator[List[Int]]).flatten
Run Code Online (Sandbox Code Playgroud)

作品。还将迭代器存储在 val 中。

斯卡拉版本:2.11.8

scala type-inference ascription

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