面向混合功能/面向对象的语言,如F#/ Scala:使用带有方法或方法和类型的类型

Pro*_*ool 3 oop f# functional-programming scala

所以,为了补充我从这个问题中学到的东西,我问:

F#记录:危险,仅限于有限使用或使用良好的功能?

这让我想到我是否应该使用带方法或记录(?)和方法的类型.例如,这是我可能做出的典型类型:

(* User Interaction Start *)

type UserInteraction public() = 

  member public x.CreatePassword(originalPassword) =
    if String.IsNullOrEmpty originalPassword then
      raise(new ArgumentException "CreatePassword: password is null or empty")
    let hashUtility = new HashUtility();

    hashUtility.CreateHash originalPassword
Run Code Online (Sandbox Code Playgroud)

我可以看到的问题是,由于允许,UserInteraction类型中的某些内容可能是可变的.现在有记录类型,据我所知,它们保证是不可变的.

是否更好地设计一个模块,其中只有方法可以接收或返回记录类型,甚至可以通过方法链接更进一步?

Dan*_*iel 8

您可能想要阅读何时使用类,联合,记录和结构 [MSDN](页面底部).您似乎对记录有一些不正确的假设.例如,他们可以像类一样拥有可变字段.重要的区别是继承,模式匹配,构造函数,隐藏成员,相等以及复制和更新表达式.

刚刚注意到该页面上的一个小错误:记录实际上可以实现接口.

另一个可能有用的部分:记录和类之间的差异 [MSDN](页面底部)