- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 scala-2.10.4 的 array.scala,Array 定义为
final class Array[T](_length: Int) extends java.io.Serializable with java.lang.Cloneable {
/** The length of the array */
def length: Int = throw new Error()
def apply(i: Int): T = throw new Error()
def update(i: Int, x: T) { throw new Error() }
override def clone(): Array[T] = throw new Error()
}
请注意,apply 方法会抛出异常!对于伴随对象 Arrry,我找到了以下代码:
def apply[T: ClassTag](xs: T*): Array[T] = {
val array = new Array[T](xs.length)
var i = 0
for (x <- xs.iterator) { array(i) = x; i += 1 }
array
}
我知道有一个隐式参数是ClassTag[T],让我惊讶的是如何
new Array[T] (xs.length)
已编译。通过反编译 Array.class,我发现该行被翻译成:
public <T> Object apply(Seq<T> xs, ClassTag<T> evidence$2)
{
// evidence$2 is implicit parameter
Object array = evidence$2.newArray(xs.length());
...
}
我真的被这种翻译弄糊涂了,背后的规则是什么?
谢谢张
最佳答案
Scala Array
类只是运行时的假包装器,因此您可以在 Scala 中使用数组。您可能感到困惑,因为 Array
类中的那些方法会抛出异常。他们这样做的原因是,如果你真的最终使用了假类,它就会爆炸,因为它实际上应该使用 java 运行时数组,它没有像 Scala 这样的合适的容器类。你可以看到 compiler handles it here .当您在 Scala 中使用数组时,您可能还会使用 predef 中的一些隐含函数,例如 ArrayOps
和 WrappedArray
用于额外的辅助方法。
TLDR:Scala 编译器神奇地使数组在幕后与 java 运行时一起工作。
关于arrays - Scala Array.apply 的魔力是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001175/
你知道有什么 Maven 插件/mojo 能够做连接点或链接吗? 最佳答案 maven junction 插件怎么样? http://pyx4j.com/snapshot/pyx4j/pyx4j-ma
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我是一名优秀的程序员,十分优秀!