Ruminant

一个用 Swift 实现的 Clojure持久化向量。

持久化向量

已经实现了核心操作,例如 conjassocget(使用下标)、subvec(使用下标)和 concat

let v: PersistentVector = ["a", "b", "c"]
let v2 = v.conj("d").assoc(index: 2, "C")
XCTAssertEqual(v, ["a", "b", "c"])
XCTAssertEqual(v2, ["a", "b", "C", "d"])
XCTAssert(v.pop() == v2[0..<2])
XCTAssertEqual(v.map {$0.uppercased()}, ["A", "B", "C"])
XCTAssertEqual(v[1], "b")
XCTAssertEqual(Array(v[1...2]), ["b", "c"])

包含瞬态向量

let v: PersistentVector = ["a", "b", "c"]
var tmp = v.transient()
tmp = tmp.pop()
tmp = tmp.conj("3")
tmp = tmp.conj("4")
XCTAssert(tmp.persistent() == ["a", "b", "3", "4"])

集成

您可以使用 Swift-Package Manager 来集成 Ruminant。

Package.swift 中添加以下依赖项

dependencies: [
.package(url: "https://github.com/jdevuyst/ruminant", from: "1.0.7")
],

使用示例

这是一个使用 Swift Package Manager 来使用此库的示例。

首先,从 CLI 创建一个名为 “Sample” 的全新目录,然后 cd 进入该目录。

mkdir sample
cd sample

接下来,在该目录中创建一个新的可执行 swift 模板。

swift package init --type executable

现在是更新 Package.swift 的时候了。

// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "sample",
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        .package(url: "https://github.com/jdevuyst/ruminant", from: "1.0.7")
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "sample",
            dependencies: ["ruminant"])
    ]
)

让我们安装新的依赖项。

swift package update

我们还将更新 Main.swift 以测试是否可以加载 Ruminant。

import ruminant

print("Hello, Persistent Vector!")

let sample = PersistentVector([1,2,3,4]).conj(45).conj(42)
print(sample)

最后,我们可以从命令行构建并运行该程序。

swift build
swift run

Hello, Persistent Vector!
[1, 2, 3, 4, 45, 42]

就这样。享受持久化数据结构的世界吧!

许可

版权所有 © 2015 Jonas De Vuyst

根据 Eclipse Public License 1.0 版或(由您选择)任何后续版本分发。