微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让一个元组给出一个随机的新元组?

如何解决如何让一个元组给出一个随机的新元组?

我正在尝试占据一个位置 (a,b) 并通过代码接收一个随机的新位置 (a,b)。我在实现代码时遇到了很大的麻烦,我得到的是迄今为止我最好的尝试。 .

type Teleport (a,b) = 
    inherit Item (a,b,' ',Color.White,Color.White)
    override this.FullyOccupy() = true
    override this.InteractWith (p: Player) =
        let mutable posX = p.X
        let mutable posY = p.Y
        let rand = System.Random()
        posX <- rand.Next()
        posY <- rand.Next()

有人可以解释为什么它不起作用吗?

它应该在游戏中用作传送器,如果玩家移动到第一个 (a,b) 应该被传送到一个新的(随机)(a,b) 位置。 谢谢!

解决方法

您的代码不起作用的原因是它永远不会改变 Player 的位置; InteractWith 只是将位置复制到两个局部变量中,然后更新它们。

这就是说,如果您想学习 F#,我强烈建议您不要以 OO 风格进行编程 - 您会更喜欢采用函数式风格。

函数式编程 (FP) 的标志之一是不变性。对于你的传送对象,这意味着不要改变 Player 的位置,而是用新位置创建一个新玩家。

尝试以下行

type Player = { X: int; Y: int; Name: string }

let teleport player =
    let rand = System.Random()
    { player with X = rand.Next 100
                  Y = rand.Next 100 }

另外,尽量不要用一个类来解决每一个问题,而是用一个函数;在上面,teleport 只是一个函数 Player -> Player

我真的希望你会喜欢 F#;这是一种在 .NET 上进行 FP 的绝佳语言。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。