【问题标题】:How to access two parameter in functional programming如何在函数式编程中访问两个参数
【发布时间】:2019-11-24 13:15:04
【问题描述】:

我有这样的管道

pipe(
    getUserData,
    getLocationData,
    someFunctionThatNeedBothUserAndLocationData
)(input)

我需要一个像这样访问用户和位置数据的函数

function someFunctionThatNeedBothUserAndLocationData(user, location){
    // do something
}

我怎样才能在函数式编程中做类似的事情?

【问题讨论】:

  • 不要使用pipe。直接调用函数还是函数式编程……
  • “功能”并不一定意味着“无点”,请参阅stackoverflow.com/a/58203072/989121
  • 这似乎是函数上下文中的应用提升:const liftA2 = f => g => h => x => f(g(x)) (h(x))
  • 请注意,管道只是倒置的函数组合,它又是一个函数计算,即函数类型的应用函子。 FP 不仅仅包含纯函数的仿函数实例。

标签: javascript functional-programming


【解决方案1】:

pipe 真的不可能,因为后续函数是一元的(它们将前一个函数的结果作为参数)。我认为 converge 功能在这里会有所帮助!

const log = (user, location) => {
  console.log(`${user.name} is in ${location}`);
};


const getUserData = () => ({ name: 'Giuseppe' });
const getUserLocation = () => 'Bologna';

R.converge(log, [
  getUserData,
  getUserLocation,
])();
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>

【讨论】:

    【解决方案2】:

    希望我不会太迟。

    const pipedFunction = pipe(
        getUserData,
        getLocationData,
        someFunctionThatNeedBothUserAndLocationData
    )(input)
    
    const getLocationData = (userData) => [user, location]
    
    const someFunctionThatNeedBothUserAndLocationData = (arg) => {
      const [user, location] = arg;
    }
    

    const pipedFunction = pipe(
        getUserData,
        getLocationData,
        someFunctionThatNeedBothUserAndLocationData
    )(input)
    
    const getLocationData = (userData) => {user, location}
    
    const someFunctionThatNeedBothUserAndLocationData = (arg) => {
      const {user, location} = arg;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2021-11-18
      • 2017-04-30
      • 2020-06-17
      相关资源
      最近更新 更多