小编Dou*_*ugC的帖子

覆盖Scala中重复的类参数?

Scala语言规范版本2.8的4.6.2节描述了重复的参数,并说:

参数部分的最后一个值参数可以以"*"为后缀,例如(...,x:T*).然后,方法中的这种重复参数的类型是序列类型scala.Seq [T].

但是,这段代码:

abstract class A { def aSeq : Seq[A] }
class B(val aSeq : A*) extends A
class C extends B { override val aSeq :Seq[A] = Seq() }
Run Code Online (Sandbox Code Playgroud)

编译时出错:

overriding value aSeq in class B of type A*;  value aSeq has incompatible type
Run Code Online (Sandbox Code Playgroud)

编译器似乎表明A*是与Seq [A]不同的类型.

在这种情况下调查aSeq的实际类显示它是scala.collection.mutable.WrappedArray $ ofRef的实例,但即使以下代码也无法使用相同的消息进行编译:

class C extends B { override val aSeq  = new ofRef(Array[A]()) }
Run Code Online (Sandbox Code Playgroud)

所以问题是,如何覆盖由类上重复参数定义的成员?

如果你想知道它来自何处,那就是exalaly scala.xml.Elem 在scala.xml.Node中覆盖方法的作用.

scala

7
推荐指数
1
解决办法
872
查看次数

如何使用自动布局调整NSView以适应其子视图的所需大小?

我有三个子视图的超级视图.其中两个子视图在superview中的大小和位置都是固定的,但第三个子视图的大小可能因内容而异.

我已经设置了自动布局约束来设置每个子视图的大小和位置,但我想要发生的是当第三个视图的内容发生变化时,superview应该调整大小以便能够完全显示它.

我已经在该子视图上实现了 - (NSSize)intrinsicContentSize,以便它返回它想要的大小,但我无法弄清楚如何添加一个约束来触发superview调整大小.

有任何想法吗?

更新:

我通过向视图添加约束来实现这一点,如下所示:

sizeWidthConstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"H:[self(==viewWidth)]" options:0 metrics:metrics views:views] lastObject];
sizeHeightConstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"V:[self(==viewHeight)]" options:0 metrics:metrics views:views] lastObject];
Run Code Online (Sandbox Code Playgroud)

其中"viewWidth"和"viewHeight"是具有所需值的度量字典中的键.在udpateConstraints中,我可以分析我的视图的内容并执行此操作:

[sizeHeightConstraint setConstant: size.height];
[sizeWidthConstraint setConstant: size.width];
Run Code Online (Sandbox Code Playgroud)

设置新值,下一个布局将导致视图的大小调整.

更新panupan的问题更新:

以这种方式创建约束时,可以放入本质上是变量名称的内容.在这种情况下,这些名称是viewWidthviewHeight.它们被称为约束的常数.您还将称为度量的字典传递给[NSLayoutConstrating constraintsWithVisualFormat:...]调用,该调用为这些常量提供值.

因此,在这种情况下,我从视图的默认高度和宽度开始,作为度量字典键的值viewWidthviewHeight.稍后,我使用setConstant:方法更改这些值.在上面的示例中,size是我根据视图内容计算的CGSize结构(即基于其子视图的大小),我使用width和height值来调整常量.

这并没有达到我的目的,因为它不会导致我的视​​图大小根据子视图的内在大小自动重新调整大小,但它确实让我有办法手动重新调整大小.

macos layout nsview osx-lion

7
推荐指数
0
解决办法
4763
查看次数

标签 统计

layout ×1

macos ×1

nsview ×1

osx-lion ×1

scala ×1