标签: destructuring

Scala极端解构?

我有这行代码,我使用我所知道的最惯用的方式来解析从函数返回的对象:

val (a, b) = foo match { case MyObjectType(a, b) => (a, b) }
Run Code Online (Sandbox Code Playgroud)

该对象的原型是:

case class MyObjectType(Type1: SomeType1, Type2: SomeType2)
Run Code Online (Sandbox Code Playgroud)

当然我可以:

val returnType = foo
val (a, b) = (returnType.a, returnType.b)
Run Code Online (Sandbox Code Playgroud)

但后者则是说明同一问题的另一种形式 - 这实际上并不优雅.一个Scala宏可以拯救提供一个简洁的成语吗?也许允许语法如下:

val (a, b) = foo deconstruct { MyObjectType(a, b) => (a, b) } // merely more shorthand, like scala allows e.g. within a map block

val (a, b) = tuplize(foo)                                     // assumes tuplize can iterate the vals of MyObjectType

tupleResult(a, b) = foo                                       // …
Run Code Online (Sandbox Code Playgroud)

macros scala destructuring

2
推荐指数
1
解决办法
280
查看次数

Kotlin解构变量不适用于Pair,Triple或数据类

我最近在kotlinc,命令行环境中尝试了以下代码.

var greet = Pair("Hello", "World")
val (word1, word2) = greet
Run Code Online (Sandbox Code Playgroud)

输出word1word2在控制台输出以下消息

>>> word1
error: unresolved reference: word1
word1
^
Run Code Online (Sandbox Code Playgroud)

我不确定是否从最新版本的kotlin中删除了解构.目前,在mac上使用编译器1.0.2版本kotlinc.

java destructuring kotlin data-class

2
推荐指数
1
解决办法
668
查看次数

数组到对象es6 javascript

我试图看看是否有一种较小的方法将数组转换为es6中的对象.(我不必担心跨浏览器)

我目前有:

function (values) // values being an array.
{   
    let [videos, video_count, page] = values;
    let data = { videos, video_count, page };
    someFunctions(data);
    moreFunctions(data);
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否可以删除该功能的第一行,let [videos....]部分.并以某种方式内联进行转换.

我通过mozilla阅读:解构分配,但我在那里看不到它.(但我可能已经理解错了)而且我真的不够聪明,无法理解ECMA:ES6 Spec.

我怀疑这是不可能的,上面已经是最简单的我可以做到的.但如果我能逃脱不创造videos,video_countpageTMP变量我会更开心.

javascript destructuring ecmascript-6

2
推荐指数
1
解决办法
299
查看次数

尝试构造可能长度为2的数组时出错

我试图构造一个长度为2的数组,但我得到一个打字稿错误:

[ts] Tuple type '[string]' with length '1' cannot be assigned
to tuple with length '2'.
Run Code Online (Sandbox Code Playgroud)
    let output = {status: false};
    if(execute.permission) {
        let message: [string] = execute.params;
        if(message.length >= 2) {
            // Destructuring follows
            [output['position'], output['message']] = message;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我怎么告诉打字稿,这个数组的长度可能是2?

javascript destructuring typescript ecmascript-6

2
推荐指数
2
解决办法
1369
查看次数

如何使用默认值将无状态组件中的道具(反应)转换为变量,并在JSX中应用带有该变量的扩展运算符?

下面的代码正确呈现

export default ({
  primitive = "a-sky",
  height = "2048",
  radius= "30",
  width= "2048"
}) => {
const properties = { primitive, height, radius, width}
return <Entity {...properties} />
}
Run Code Online (Sandbox Code Playgroud)

但是,我能做些什么来省略复制道具名称原语,高度等的需要吗?

下面的代码不起作用,但显示了我的意思

let properties
export default ({
  primitive = "a-sky",
  height = "2048",
  radius= "30",
  width= "2048"
} = properties) => {
return <Entity {...properties} />
Run Code Online (Sandbox Code Playgroud)

}

javascript destructuring reactjs aframe

2
推荐指数
1
解决办法
1102
查看次数

卷入功能和ES6破坏

我正在测试一些currying-in功能,我可以很容易地让它工作:

test = (a) => { return (b) => a+b } // test(5)(6) => 11
Run Code Online (Sandbox Code Playgroud)

使用ES6 destructing参数时,我无法使用相同的功能:

test = ({a}) => { return (b) => a+b } // test(5)(6) => NaN 
Run Code Online (Sandbox Code Playgroud)

有没有办法让它发挥作用?为什么第二个测试功能不起作用?

javascript currying destructuring

2
推荐指数
1
解决办法
111
查看次数

如何在同一个表达式中构造和初始化缺失的嵌套字段?

我一直试图弄清楚嵌套的ES6解构是否支持这种功能.a如果它不存在,我想指定为空对象,然后将其属性名称分配给b范围变量b.

var {
  a = {},
  a: {
    b = 2,
  },
} = {};

VM40:4 Uncaught TypeError: Cannot destructure property `b` of 'undefined' or 'null'.
    at <anonymous>:6:5
Run Code Online (Sandbox Code Playgroud)

在没有假设对象格式的情况下,我似乎无法真正嵌套解构.以下工作,但我正在寻找一个更简洁的方法,您可以轻松地看到原始对象的嵌套布局.

var {
  a = {},
} = {};

var {
  b = 2,
} = a;

// works as expected
// starts to look crazy when 'forking' branches that may or may not exist
Run Code Online (Sandbox Code Playgroud)

javascript destructuring ecmascript-6

2
推荐指数
1
解决办法
726
查看次数

数组解构和扩展运算符

我不是 100% 清楚这段代码是如何工作的:

var a = [1, 2, 3];

[x, y, ...a ] = [0, ...a, 4];

// OUTPUT:  [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我正在a使用...运算符解构数组。

我期待在第二行会进行一系列任务。

x将被分配为0,y将被分配给...a(其传递数组中的元素a作为单独的值)。

但是,我不清楚如何将...aget 分配给 4。实际上,JS 在执行以下操作时会抛出异常:

...a = 4;
// Uncaught SyntaxError: Rest parameter may not have a default initializer
Run Code Online (Sandbox Code Playgroud)

为什么这段代码以 end 输出修改后的数组4,而不是抛出异常?这是如何工作的?

javascript arrays destructuring

2
推荐指数
1
解决办法
464
查看次数

JavaScript:通过计算键动态解构对象

我正在尝试编写一个咖喱函数dissoc,它接受一个prop和一个对象,并从该对象中删除键及其值。

这是有效的代码:

const dissoc = prop => obj => {
  const result = {};
  for (let p in obj) {
    result[p] = obj[p];
  }
  delete result[prop];
  return result;
};
Run Code Online (Sandbox Code Playgroud)

现在,我认为可以通过使用计算属性,解构和rest运算符简化代码:

const dissoc = prop => ({ [prop], ...obj}) => obj
Run Code Online (Sandbox Code Playgroud)

但是此代码抛出:

Uncaught SyntaxError: Unexpected token ,
Run Code Online (Sandbox Code Playgroud)

所以我尝试了:

const dissoc = prop => ({ prop, ...obj}) => obj
Run Code Online (Sandbox Code Playgroud)

计算,但只返回不带prop的对象。

有没有办法动态地分解和/或简化此代码?

javascript destructuring computed-properties

2
推荐指数
1
解决办法
170
查看次数

通过解构重新分配 JavaScript 变量

如果我在 JavaScript 中声明新变量,我可以通过如下解构来实现:

const myObj = {
  thing1: 'first thing',
  thing2: 'second thing'
};

const { thing1, thing2 } = myObj;
Run Code Online (Sandbox Code Playgroud)

我想做一些类似的事情,但是通过重新分配作为函数中的参数传递的变量(通过隐含分配let,因此不是静态的)。我尝试了以下内容:

function myFun(thing1, thing2) {
  const myObj = {
    thing1: 'first thing',
    thing2: 'second thing'
  };

  { thing1, thing2 } = myObj;
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个意外的令牌错误=。这是可能的还是我只能用解构声明新变量?

javascript destructuring ecmascript-6

2
推荐指数
1
解决办法
678
查看次数