gpt4 book ai didi

functional-programming - 函数式编程 - 倒数时避免使变量可变

转载 作者:行者123 更新时间:2023-12-02 01:48:18 26 4
gpt4 key购买 nike

Yesterday's thread

首先感谢您昨天的回复。我能够继续。

我当前的问题是,我已经能够避免使除 Pokemon 的 currentHP 之外的所有变量都可变。首先是我的战斗代码,解释如下。

let angriffFighter(fighterPair:list<Domain.Pokemon>) =
let dmg = hit fighterPair.[0] fighterPair.[1]
fighterPair.[1].currentHP <- fighterPair.[1].currentHP-dmg

函数“hit”计算所处理的伤害并返回一个int。currentHP 是我似乎无法使其不可变的唯一剩余变量。我需要在每场战斗中减少它,并希望在战斗结束后将其重置为 maxHP。

我该如何解决这个问题?

最佳答案

使用 copy-and-update expression返回包含更改字段的新记录值:

let angriffFighter (fighterPair : list<Domain.Pokemon>) =
let dmg = hit fighterPair.[0] fighterPair.[1]
let new1 = { fighterPair.[1] with currentHP = fighterPair.[1].currentHP - dmg }
[ fighterPair.[0]; new1 ]

但实际上,与其将列表作为一对传递,不如只使用一对(元组)要容易得多:

let angriffFighter (x, y) =
let dmg = hit x y
x, { y with currentHP = y.currentHP - dmg }

此版本接受一个元组作为输入,并返回一个相同类型的元组。更简单、更安全,因为使用元组,您知道第一个和第二个元素将在那里。这与列表相反,在列表中索引(使用 .[0].[1] 等)是不安全的,因为您不知道该索引处是否存在元素。

关于functional-programming - 函数式编程 - 倒数时避免使变量可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70642657/

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