我有一个数据类MyDataClass
:
data class MyDataClass(val a: Int, val b: Int)
和具有两个属性的类MyClass
。我想要构造MyDataClass
的实例,因此将a
和b
分配给MyClass
属性,而不是声明新变量:
class MyClass {
val a: Int
val b: Int
init {
val mdc = MyDataClass(1, 4)
(a, b) = mdc //error
}
}
答案 0 :(得分:4)
不,只允许对局部变量和lambda参数进行解构声明。
此外,它们仅用于一次创建多个局部变量。所以允许val (a, b) = mdc
,但是
(a, b) = mdc
语法无效,即使a
和b
不是属性。
答案 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"]
);
}