compose 和 reduce 的 Ramda 错误 > 无法读取未定义的 属性 '@@transducer/step'

Ramda error with compose and reduce > Cannot read property '@@transducer/step' of undefined

我在使用 Ramda 时遇到了一个奇怪的错误(对我来说):

当我在作文中使用时:

const total_ok = R.compose(
  values => R.reduce(sum_value, 0)(values),
  R.prop('items')
)

一切正常。

但如果我这样重构它:

const total_bad = R.compose(
  R.reduce(sum_value, 0),
  R.prop('items')
)

我有错误 "Cannot read property '@@transducer/step' of undefined"。

我不明白为什么。

您可以在此处测试代码:http://ramdajs.com/repl/#?code=const%20total_ok%20%3D%20R.compose%28%0A%20%20values%20%3D%3E%20R.reduce%28sum_value%2C%200%29%28values%29%2C%0A%20%20R.prop%28%27items%27%29%0A%29%0A%0Aconst%20total_bad%20%3D%20R.compose%28%0A%20%20R.reduce%28sum_value%2C%200%29%2C%0A%20%20R.prop%28%27items%27%29%0A%29%0A%0Aconst%20sum_value%20%3D%20%28duration%2C%20item%29%20%3D%3E%20%7B%0A%20%20return%20duration%20%2B%20item.value%3B%0A%7D%3B%0A%0A%0Alet%20data%20%3D%20%7B%0A%20%20items%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20value%3A%201%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20value%3A%202%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20value%3A%203%0A%20%20%20%20%7D%0A%20%20%5D%0A%7D%0A%0Aconsole.log%28%22total%28data%29%3A%20%22%2Btotal_ok%28data%29%29%3B%0Aconsole.log%28%22total%28data%29%3A%20%22%2Btotal_bad%28data%29%29%3B

你有想法吗?

弗雷德里克

这仅仅是因为您在定义它之前试图使用 sum_value。当您引入 lambda 表达式 values => R.reduce(sum_value, 0)(values) 时,您将 sum_values 的计算延迟到您定义它之后,一切正常。

如果您要将 sum_value 的定义移动到 total_bad 之上(或者类似地,如果它是函数声明或 var 语句,因此会被提升)那么这只会工作。

您可以在 the REPL.

中查看更新版本