函数式编程 - 倒计时时避免让我的变量可变
Functional Programming - Avoid making my variable mutable when counting it down
首先让我感谢你昨天的回复。我能够继续。
我目前的问题是我已经能够避免使所有变量可变,除了 Pokemon 的 currentHP。
先是我的战斗代码,后面是解释。
let angriffFighter(fighterPair:list<Domain.Pokemon>) =
let dmg = hit fighterPair.[0] fighterPair.[1]
fighterPair.[1].currentHP <- fighterPair.[1].currentHP-dmg
函数“hit”计算处理的 dmg 和 returns 一个整数。
currentHP 是我似乎无法使其不可变的唯一剩余变量。
我需要在每个战斗中减少它,我希望它在战斗后重置为 maxHP。
我该如何解决这个问题?
使用 copy-and-update expression 到 return 具有更改字段的新记录值:
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 }
此版本将一个元组作为输入,并且 return 是一个相同类型的元组。更简单、更安全,因为有了元组,您知道第一个和第二个元素将在那里。这与列表相反,在列表中索引(使用 .[0]
、.[1]
等)是不安全的,因为您不知道那里是否会有一个元素指数.
首先让我感谢你昨天的回复。我能够继续。
我目前的问题是我已经能够避免使所有变量可变,除了 Pokemon 的 currentHP。 先是我的战斗代码,后面是解释。
let angriffFighter(fighterPair:list<Domain.Pokemon>) =
let dmg = hit fighterPair.[0] fighterPair.[1]
fighterPair.[1].currentHP <- fighterPair.[1].currentHP-dmg
函数“hit”计算处理的 dmg 和 returns 一个整数。 currentHP 是我似乎无法使其不可变的唯一剩余变量。 我需要在每个战斗中减少它,我希望它在战斗后重置为 maxHP。
我该如何解决这个问题?
使用 copy-and-update expression 到 return 具有更改字段的新记录值:
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 }
此版本将一个元组作为输入,并且 return 是一个相同类型的元组。更简单、更安全,因为有了元组,您知道第一个和第二个元素将在那里。这与列表相反,在列表中索引(使用 .[0]
、.[1]
等)是不安全的,因为您不知道那里是否会有一个元素指数.