gpt4 book ai didi

javascript - 如何从动态镜头获得动态 View

转载 作者:行者123 更新时间:2023-11-28 17:58:48 25 4
gpt4 key购买 nike

动态地使用R.view ...

const robotsNames = [ 'da Vinci Surgical System',  'KITT', 'The Tachikomas', 'Toyota violin-playing robot',
'GERTY', 'Mega Man', 'Rock ‘Em Sock ‘Em Robots', 'Doraemon', 'Awesom-O', 'HK-47', 'ED-209', 'Beer-Fetching Robot',
'Bishop', 'The Energizer Bunny', 'Clank', 'Daft Punk', 'Johnny 5', 'The Robot', 'Roboto', 'Marvin the Paranoid Android',
'Lego Mindstorms NXT', 'Robbie', 'Astro Boy', 'The Iron Giant', 'Optimus Prime', 'Roomba', 'DJ Roomba', 'Cindi Mayweather',
'Rosie', 'Crow T. Robot/Tom Servo', 'K-9', 'The Terminator', 'The Maschinenmensch, aka Maria', 'ASIMO', 'GLaDOS', 'HAL 9000',
'The Final Five', 'Sojourner', 'Data', 'R2D2', 'Bender Bending Rodriguez', 'Wall-E' ];

const getRandomInt = R.curry((min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
})
const getRandomFromZero = getRandomInt(0);
const lensRandomRobot = R.pipe(R.length, getRandomFromZero, R.lensIndex);

// NOT WORK...
const randomRobot = R.pipe(lensRandomRobot, R.view);
const robot = randomRobot(robotsNames);

// THIS WORKS ..
// const robot = R.view(lensRandomRobot(robotsNames))(robotsNames) // I dont want to pass the values twiice

console.log(robot);
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.23.0/ramda.min.js"></script>

最佳答案

有两件事:

  • 达蒙的回答很好。 converge按预期完成工作。但还有多种选择可供考虑。 converge 是 Ramda 特有的。您可能会对 FP 世界更熟悉的东西感兴趣。 lift更为常见。您可以像这样使用它:

    const randomRobot = R.lift(R.view)(lensRandomRobot, R.identity);

    或者,也许最好是 ap ,除了 view 中的参数顺序之外,这将是完美的与 ap 提供的相反,因此需要有一个 flip还有*:

    const randomRobot = R.ap(R.flip(R.view), lensRandomRobot);

    您可以在 Ramda REPL 上看到这些方法。

  • 其次,在函数代码中引入随机源是一个奇怪的想法。显然,任何使用随机值的东西都不再是引用透明的。这就是 Ramda 不提供 random/shuffle 函数的原因。

    Ramda 曾一度尝试过随机性,尝试使用引用透明的版本。但最终因为一场糟糕的比赛而放弃,但是that code可能会帮助您创建基于随机的代码的可测试版本。

<小时/>

*重点是,当 ap 应用于函数时,它的行为如下:

ap(f, g)(x); //=> f(x)(g(x))

对于像 Ramda 那样柯里化(Currying)的函数,这相当于

ap(f, g)(x); //=> f(x, g(x))

关于javascript - 如何从动态镜头获得动态 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43971174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com