【问题标题】:Change a attribute in Haskell [duplicate]更改 Haskell 中的属性 [重复]
【发布时间】:2019-10-12 22:11:09
【问题描述】:

如何增加属性? 我创建了一个用户类型

data user = User{
username :: String,
passwort :: String,
points :: Int
}

user = user {username ="Test",
             passwort="test123",
             points=100
             }

我想将分数增加 10,我尝试在其他编程语言中做类似的事情 points += 10

userplus10 = user{points = points +10}

(顺便说一句。这不起作用) 创建一个新用户,但在点上有另一个值。

【问题讨论】:

  • 是的,Haskell 是一种纯粹的函数式语言。您只能创建具有不同值的新用户对象,不能改变现有值。
  • 别忘了投票!

标签: haskell functional-programming


【解决方案1】:

它确实有效,但您需要指定要增加哪些点。 users,对吧?

userplus10 = user{points = points user + 10}

不过,lenses 是一种更好的处理方式。

{-# LANGUAGE TemplateHaskell, Rank2Types #-}

import Control.Lens

data User = User
   { _username :: String,
   , _passwort :: String,
   , _points :: Int
   }
makeLenses ''User

user = user {username ="Test", passwort="test123", points=100}

userPlus10 = user & points +~ 10

【讨论】:

  • 对不起,我是 Haskell 的新手,这两件事都一样吗?有一种方法比另一种更好吗?
  • 我认为镜头版本确实更好,但是它需要一个重量级的库和一些非常先进的多态技巧(因此-XRank2Types 扩展)。
  • This 是一篇很棒的文章,适合那些对 Haskell 相对较新的人,关于镜头如何让您在 Haskell 中编写“OO-looking”代码。此外,虽然整个 Lens 包确实是一头野兽,但有各种“简化”的 Lens 包可以为您提供所有最常用的功能,而无需大量依赖,例如。 this one
猜你喜欢
  • 2021-05-27
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多