【发布时间】:2015-01-27 15:51:46
【问题描述】:
我有以下课程:
class Client {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let wrongClient = Client(name: "John", age: 9)
我怎样才能创建一个新版本的wrongClient 与正确的年龄?
我想要以下内容:
let rightClient = Client(wrongClient, age: 42)
例如,OCaml 允许开发人员执行以下操作:
type client = {
name : string;
age : int;
}
let wrong_client = {name = "John"; age = 25}
let right_client = {wrong_client with age = 42}
或者在 Scala 中:
case class Client(name: String, age: Int)
val wrongClient = Client(name: "John", age: 9)
val rightClient = wrongClient.copy(age=42)
编辑
我想用 Swift 试验数据不变性和数据共享。
因为不可变数据意味着从其他值“生成”值,所以“复制”对象可能经常发生。所以我的问题真的是:如何使用 Swift 从其他对象轻松构造新对象?
编辑 2
我目前正在查看Swiftz' lenses。
【问题讨论】:
-
为什么要添加
OCaml作为标签添加? -
@JacksonTale 很抱歉,我只是想看看它是否修复了语法高亮。
-
@JacksonTale 感谢您的链接!虽然 Swift 并未被认为是一种函数式语言,但我发现拥有一些工具来构建不可变数据结构有点尴尬,但几乎没有一个工具可以轻松使用它们。
-
我认为 Swift 就像 Java 8 或 Python 一样,是一种具有一些功能点的命令式语言?