使用splat扩展对象并执行

时间:2014-12-05 01:39:44

标签: livescript

小问题,但想知道是否有人可以使用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

3 个答案:

答案 0 :(得分:2)

也许你想要的是with

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

来自LiveScript 1.3.1 operators' docs

  

带有(也就是克隆端口)的中缀组合了克隆和属性复制操作符,以便于创建对象。它相当于^^ obj<<< obj2的。请记住,clone运算符创建了一个原型克隆,并且原型未在JSON中序列化。

答案 1 :(得分:0)

我发现<<<这将完成工作,但有点迂回:

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

更新:已修改,以防止基于@ homam的建议对base-obj进行副作用更改。

答案 2 :(得分: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