-1

小事,但想知道是否有人可以提出更好的语法来使用 splat 扩展现有对象,但不使用花括号?我的主要目的是在将扩展对象传递给函数时保持缩进样式。这具有正确的行为:

base-obj =
  old-prop: \value

do-something {
  ...base-obj
  extended-prop: \value
}

但是花括号能以某种方式消除吗?“做”不起作用:

old-obj =
  old-prop: \value

do-something do
  ...old-obj
  new-prop: \value

  # do-something will only see new-prop
4

3 回答 3

2

也许你想要的是with

do-something base-obj with do
  extended-prop: \value

来自LiveScript 1.3.1 操作员的文档

中缀 with(又名 cloneport)结合了克隆和属性复制操作符以便于创建对象。它相当于 ^^obj <<< obj2。请记住,克隆操作符会创建一个原型克隆,并且原型不会在 JSON 中序列化。

于 2015-01-18T15:23:49.017 回答
0

另一种方式,使用do

# new object can overwrite old-obj
do-something do
  old-obj <<<
    new-prop: \value
    another: \content


# old-obj can overwrite new object
do-something do
  do
    new-prop: \value
    another: \content
  <<< old-obj
于 2015-04-08T16:45:08.283 回答
0

我发现 <<< 可以完成工作,但方式有点迂回:

do-something {} <<< base-obj <<<
  extended-prop1: \value1
  extended-prop2: \value2

更新:根据@homam 的建议进行了修改以防止对 base-obj 的副作用更改。

于 2014-12-05T23:58:22.663 回答