Psy*_*an2 2 f# functional-programming
首先感谢您昨天的回复。我能够继续。
我当前的问题是,我已经能够避免使除 Pokemon 的 currentHP 之外的所有变量都可变。先我的战斗代码,解释如下。
let angriffFighter(fighterPair:list<Domain.Pokemon>) =
let dmg = hit fighterPair.[0] fighterPair.[1]
fighterPair.[1].currentHP <- fighterPair.[1].currentHP-dmg
Run Code Online (Sandbox Code Playgroud)
函数“hit”计算所处理的伤害并返回一个 int。currentHP 是我似乎无法使其不可变的唯一剩余变量。我需要在每场战斗中减少它,并且我希望在战斗结束后将其重置为 maxHP。
我将如何解决这个问题?
使用复制和更新表达式返回包含已更改字段的新记录值:
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 ]
Run Code Online (Sandbox Code Playgroud)
但实际上,与其将列表作为一对传递,不如只使用一对(元组)要容易得多:
let angriffFighter (x, y) =
let dmg = hit x y
x, { y with currentHP = y.currentHP - dmg }
Run Code Online (Sandbox Code Playgroud)
此版本接受一个元组作为输入,并返回一个相同类型的元组。更简单、更安全,因为对于元组,您知道第一个和第二个元素将在那里。这与列表相反,在列表中索引(使用.[0]
、.[1]
等)是不安全的,因为您不知道该索引处是否存在元素。
归档时间: |
|
查看次数: |
96 次 |
最近记录: |