Tag: 斯卡拉

Kotlin:围绕几个表达式(或语句)

我认为这个问题与Kotlin函数声明有些相关:在大括号之前的等号 在Scala中,每个语句都是一个表达式(可能带有Unit类型)。 如果我们用大括号包围多个表达式,那么最后的表达式就是大括号部分的实际值。 因此, // Scala val a = { val b = 1 val c = b + b c + c } println(a) a的类型是Int ,代码打印值4 。 但是,在Kotlin,这有些不同。 如果我们在Kotlin做同样的事情, // Kotlin val a = { val b = 1 val c = b + b c + c } println(a) is () -> Int的类型,代码打印Function0<java.lang.Integer> […]

Kotlin泛型继承

我有一个基类Base,两个特性让我们说Trait1和Trait2。 我想用这三样东西写一个参数化的类。 在斯卡拉我做: class C[T <: Base with Trait1 with Trait2] { … } 在kotlin我试着: class C<T : Base, Trait1, Trait2> { … } 但它不好,Trait1和Trait2是更多的类型参数。 有没有办法写这个?

将Scala函数转换为Kotlin函数

我对于Scala Kotlin都很陌生,并且试图将一些Scala代码转换成Kotlin,只是为了让我的头脑对事物有所了解。 我遇到的一个问题就是把这个Scala函数转换成Kotlin函数。 def changeXToDigit(value:String): String = { value.map { case 'X' => random.nextInt(10).toString case letter => letter }.mkString } 我知道在Kotlin中没有mkString等价物,但是我想到了类似的东西 fun changeXToDigit(value: String):String = { value.map { it -> when(it) { 'X' -> random.nextInt(10).toString else -> it } } 可能工作,但IntelliJ抱怨,我有点失落的错误。 Error:(11, 45) Kotlin: Inferred type is a function type, but a non-function type String […]

Kotlin zipAll替代

Kotlin的功能是否像Scala中的zipAll一样? 在scala我可以做两个不同长度的数组的总和使用zipAll函数。 斯卡拉: val arrA = Array(1,2,3) val arrB = Array(4, 5) arrA.zipAll(arrB, 0, 0).map(x => x._1 + x._2) 或者在Kotlin中做到这一点的正确方法是什么?

Kotlin中的uncheckedVariance?

Martin Odersky在“ 编译器是数据库”的演讲中提出了一个有趣的方差角落案例: class Tree[-T] { def tpe: T @uncheckedVariance def withType(t: Type): Tree[Type] } T被定义为是逆变的,因为将类型树( Tree[Type] )看作是一个无类型树( Tree[Nothing] )的子Tree[Type]是有用的,而不是相反。 通常,Scala编译器会抱怨T出现在tpe方法的返回类型中。 这就是为什么Martin用@uncheckedVariance annotion关闭编译器的原因。 这里是翻译成Kotlin的例子: abstract class Tree<in T> { abstract fun tpe(): T abstract fun withType(t: Type): Tree<Type> } 正如所料,Kotlin编译器抱怨T出现在“out”的位置。 Kotlin有类似于@uncheckedVariance东西吗? 还是有更好的方法来解决这个问题?