是否可以将数据类'实例解构为类'属性?

时间:2017-10-07 16:54:41

标签: kotlin

我有一个数据类MyDataClass

data class MyDataClass(val a: Int, val b: Int)

和具有两个属性的类MyClass。我想要构造MyDataClass的实例,因此将ab分配给MyClass属性,而不是声明新变量:

class MyClass {

  val a: Int
  val b: Int

  init {
    val mdc = MyDataClass(1, 4)
    (a, b) = mdc //error
  }

}

2 个答案:

答案 0 :(得分:4)

不,只允许对局部变量和lambda参数进行解构声明。

此外,它们仅用于一次创建多个局部变量。所以允许val (a, b) = mdc,但是 (a, b) = mdc语法无效,即使ab不是属性。

答案 1 :(得分:1)

虽然解构声明只允许用于本地,但你仍然可以做这样的事情

async function deriveSecretKey(privateKey, publicKey) {
  let sharedKey = await window.crypto.subtle.deriveKey(
    {
      name: "ECDH",
      public: publicKey
    },
    privateKey,
    {
      name: "AES-GCM",
      length: 256
    },
    false,
    ["encrypt", "decrypt"]
  );
  return window.crypto.subtle.deriveKey(
    {
      name: "HKDF",
      hash:  {name: "SHA-256"} ,
      salt: new ArrayBuffer(0),
      info: new ArrayBuffer(0)
    },
    sharedKey,
    {
      name: "AES-GCM",
      length: 256
    },
    false,
    ["encrypt", "decrypt"]
  );
}