小编Psy*_*an2的帖子

函数式编程 - 避免匹配表达式中的可变和改变 int 值

我刚刚开始进行函数式编程。我目前要开始的小项目是一场基本的口袋妖怪战斗。

先写代码,再解释。

let choosePokemon () =
    let mutable pokemon = DemoData.schiggy
    let msg = Console.ReadLine()
    match msg with
    | "Schiggy" -> pokemon <- DemoData.schiggy
    | "Pikachu" -> pokemon <- DemoData.pikachu
    | "Kleinstein" -> pokemon <- DemoData.kleinstein
    | "Karpador" -> pokemon <- DemoData.karpador 
    pokemon
Run Code Online (Sandbox Code Playgroud)

我目前要求人们输入 Pokemon 的名称,如果它与预定义的集合(Schiggy、Pikachu、Kleinstein 或 Karpador)相匹配,则会为他们提供相应的 Pokemon。或者它给他们默认的口袋妖怪。

我目前正在创建它,然后将其与“let mutable pokemon = DemoData.schiggy”匹配。我不想要这样。我只想根据它的名称来分配它。

如果我可以不使用该行,我将避免使其可变,无论如何,这是我不想要的。

进一步的问题是:当口袋妖怪互相攻击时,他们的生命值会减少。

面对不断变化的 int 值时,如何避免使用可变 int?

提前致谢 :)

f# functional-programming

4
推荐指数
1
解决办法
99
查看次数

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

昨天的话题

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

我当前的问题是,我已经能够避免使除 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。

我将如何解决这个问题?

f# functional-programming

2
推荐指数
1
解决办法
96
查看次数

标签 统计

f# ×2

functional-programming ×2