我正在研究如何实现2.12的for
,并对其工作方式有疑问:
public class test {
public static void main(String [] args) {
System.out.println("Hello World!");
int a = 7;
System.out.println("A is Prime: " + isPrime(a));
System.out.println();
int b = 4;
System.out.println("B is Prime: " + isPrime(b));
System.out.println();
int c = -7;
System.out.println("C is Prime: " + isPrime(c));
System.out.println();
int d = 53;
System.out.println("D is Prime: " + isPrime(d));
}
public static boolean isPrime(int p) {
for (int i = 2; i < p; i++) {
if (p < 2 || p % i == 0) {
return false;
}
}
return true;
}
}
可以看出,scala.collection.immutable.ListSet[T]
只是使用给定的元素创建了一个新的Node。如何保留对在其上调用sealed class ListSet[A] extends AbstractSet[A]
with Set[A]
with GenericSetTemplate[A, ListSet]
with SetLike[A, ListSet[A]]
with Serializable {
def +(elem: A): ListSet[A] = new Node(elem)
//...
protected class Node(override protected val elem: A) extends ListSet[A] with Serializable {
override def +(e: A): ListSet[A] = if (contains(e)) this else new Node(e)
//...
}
}
的{{1}}的引用? Node.+(e: A)
方法的实现方式为
Node
这应该为我们提供对初始空+
实例的引用。
您能解释一下它是如何工作的吗?
答案 0 :(得分:4)
由于Node
被定义为ListSet
的内部类,因此Node
的每个实例都会自动包含对其创建的外部类实例的引用。
您可以使用表达式ListSet
从内部类内部访问外部ListSet.this
的此实例