小编let*_*rec的帖子

我怎么知道Kotlin的推断类型?

(我用Kotlin 1.1.2-2)

例如,我如何知道推断的表达式if (boolean_value) 1 else 2.0kotlinc-jvm没有显示类型.javaClass也没有帮助,因为它显示计算值的类型而不是表达式.

>>> (if (true) 1 else 2.0).javaClass.name
java.lang.Integer
>>> (if (false) 1 else 2.0).javaClass.name
java.lang.Double
>>> val v: Double = if (false) 1 else 2.0
error: the integer literal does not conform to the expected type Double
val v: Double = if (false) 1 else 2.0
                       ^
Run Code Online (Sandbox Code Playgroud)

types type-inference intellij-idea kotlin

11
推荐指数
1
解决办法
5733
查看次数

如何为具有特征对象成员的结构实现调试特征?

我的目标是打印具有特征对象成员的结构的内容,但我找不到如何告诉 Rust 编译器该成员还实现了其他特征,例如Displayor Debug

例如,在下面的程序中,我想打印 的结构S2(并S1进行比较),但我陷入了 的实现中fmt

trait Tr {}

impl Tr for usize {}

impl Tr for String {}

#[derive(Debug)]
struct S1<A: Tr + std::fmt::Debug> {
    member: Box<A>,
}

struct S2 {
    member: Box<Tr>,
}

impl std::fmt::Debug for S2 {
    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
        // ??
        Ok(())
    }
}

fn main() {
    let s1 = S1 {
        member: Box::new(String::from("abc")),
    };

    println!("{:?}", s1);

    let s2 = …
Run Code Online (Sandbox Code Playgroud)

traits rust

8
推荐指数
1
解决办法
7150
查看次数

为什么带有私有 setter 的 var 位置不变?

(我使用kotlin 1.1.2-2)

我发现有两种方法可以定义可变但不能通过分配的属性=

  1. var与私人二传手
  2. val具有私有变量支持属性

我还发现他们有不同的行为。

T声明时out,具有私有 setter 的var类型T不能被定义,而val具有支持属性的类型是合法的。

open class A<out T>(v: T) {
    // error because T occurs in invariant position
    var prop1: T = v
    private set

    private var _prop: T = v
    val prop2: T get() = _prop
}
Run Code Online (Sandbox Code Playgroud)

为什么prop1位置不变而prop2不是不变?差异从何而来?

types covariance kotlin

6
推荐指数
1
解决办法
766
查看次数

如何从同一签名的方法或扩展函数调用顶级函数?

我用kotlin 1.1.2-2

我想plus100(Int):Int从方法调用顶级函数Mul2.plus100(Int):Int.我尝试在下面的代码中执行此操作,但实际上Mul2.plus100本身也被调用.

class Mul2 {
    fun plus100(v: Int): Int = plus100(2 * v)
}

fun plus100(v: Int): Int = v + 100

fun main(args: Array<String>) {
    val v = Mul2()
    println(v.plus100(10)) // expected: "120", actual: StackOverflowError
}
Run Code Online (Sandbox Code Playgroud)

反正有访问plus100Mul2.plus100

kotlin

5
推荐指数
1
解决办法
804
查看次数

数据中的&lt;周期&gt;是什么?

(我使用OCaml版本4.02.3)

我定义了一个类型 self

# type self = Self of self;;
type self = Self of self 
Run Code Online (Sandbox Code Playgroud)

及其实例 s

# let rec s = Self s;;
val s : self = Self <cycle>
Run Code Online (Sandbox Code Playgroud)

由于OCaml是一种严格的语言,我希望定义s会陷入无限递归。但是口译员说s确实有价值Self <cycle>

我还将一个功能应用于s

# let f (s: self) = 1;;
val f : self -> int = <fun> 
# f s;;
- : int = 1 
Run Code Online (Sandbox Code Playgroud)

似乎s未在函数应用程序之前进行评估(例如使用非严格语言)。

OCaml如何处理像循环数据sSelf <cycle>是正常形式吗?

evaluation ocaml

4
推荐指数
1
解决办法
396
查看次数