【问题标题】:Create JavaScript object from value with multiple operations using Ramda使用 Ramda 从具有多个操作的值创建 JavaScript 对象
【发布时间】:2015-12-23 21:50:48
【问题描述】:

如何在Ramda 中最好地创建此函数?

function get_parts (buffer) {
  return {
    a: buffer.readInt16LE(0),
    b: buffer.slice(2, 4)
  }
}

get_parts(new Buffer('abcd'))

目的是保持函数调用风格,并以尽可能简单的方式指定(和加入)操作。

【问题讨论】:

    标签: javascript functional-programming ramda.js


    【解决方案1】:

    我看不出改变该功能的真正理由。

    它简洁、易读,并且很好地表达了您想要做的事情。假设您仍然想通过 new Buffer('abcd') 或类似的方法,我看不出有什么可做的。

    如果您想制作它的免积分版本,那当然可以,但我认为不建议这样做。这在使代码更具可读性时很有用,但在这里不会这样做。这是我的第一次尝试,它并不漂亮:

    var get_parts = R.converge(R.unapply(R.zipObj(['a', 'b'])), [ 
                               R.invoker(1, 'readInt16LE')(0), 
                               R.invoker(2, 'slice')(2, 4)
    ]);
    

    【讨论】:

    • 谢谢斯科特。我想知道是否有办法编写它来消除对显式参数的需要,但我很高兴听取您的建议。
    • 好吧,也许有人能想出一个比我更好的——很有可能——比原来的更易读——我认为不太可能。对我来说,免积分是一项很棒的技术,但我们往往会不必要地痴迷于它。如果您的环境允许,我看到的对原始函数的唯一真正清理是使用胖箭头而不是 function 关键字。
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多