在Kotlin中,以下似乎是合理的代码:
data class Foo(val bar: String) {
fun combine(other: Foo): Foo {
return Foo(bar + other.bar)
}
companion object Foo {
fun someHelper() {}
}
}
但是,它没有编译:类型Foo
绑定到Foo.Foo
而不是Foo
!
这是(语言设计或编译器)错误,还是这个功能?如果是后者,在伴侣对象存在的情况下实现combine
的惯用方法是什么?
当然,我会考虑解决方法:
fun combine(other: my.package.Foo): my.package.Foo {
return Foo(bar + other.bar)
}
但这不太好,现在是吗?
答案 0 :(得分:2)
根据documentation,解决方案是省略名称:
class Robot(pygame.sprite.Sprite):
def __init__(self, group):
super(Robot, self).__init__(group)
self.num_box = random.randint(1,5)
for box in self.numBox:
box = Box(group):
class Box(pygame.sprite.Sprite):
def __init__(self, group):
super(Box, self).__init__(group)
bug = Bug(group)
class Bug(pygame.sprite.Sprite):
def __init__(self, group):
super(Bug, self).__init__(group)
...
def main():
group = pygame.sprite.Group()
robot = Robot(group)
while True:
group.update()
这将创建一个伴随对象,而不会与类名冲突(作为明确命名的伴随对象companion object {
fun someHelper() {}
}
)。它的方法仍以Foo
形式提供,Foo.someHelper()
的缩写。