sách gpt4 ăn đã đi

swift - 想帮助理解这个 Swift 黑客

In lại 作者:搜寻专家 更新时间:2023-11-01 07:17:11 26 4
mua khóa gpt4 giày nike

我遇到了这个很酷的 Swift 技术的例子,但没有解释它是如何工作的或者它做了什么,尽管我已经写了相当多的 Swift 代码,但它充满了错综复杂的 Swiftisms,它目前正在扭曲我的转过头去。

如果有足够精通 Swift 的人不介意剖析它并辨别它的目的,那真的会增加我对这门语言及其更强大功能的掌握,并且可能也会启发其他人。

extension Array {
var match : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..
}
}

func map(f: A -> B, arr: [A]) -> [B] {
if let (head, tail) = arr.match {
return [f(head)] + map(f, tail)
} khác {
return []
}
}

câu trả lời hay nhất

sự mở rộngđến Mảng type 定义了一个名为 cuộc thi đấu 的新计算属性.此属性的类型为 (head: T, tail: [T])? ,所以一个可选的元组,其中第一个元素 (名为 cái đầu ) 的类型为 T第二个元素 (名为 đuôi ) Đúng T 的数组类型. T只是存储在数组中的元素类型的通用类型(因为 Mảng 本身就是一个通用集合)。

var match : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..
}

此计算属性要么返回 không ,如果 Array 不包含任何元素,或者它返回一个元组,其中包含列表的第一个元素( self[0] 和列表的尾部(除第一个元素之外的所有元素):Array(self[1..<>

现在数组有了这个计算属性,我们可以利用它递归调用函数 nếu在数组的元素上并返回一个新的 Mảng包含这些函数调用的结果。这是什么bản đồ功能:

func map(f: A -> B, arr: [A]) -> [B] {
if let (head, tail) = arr.match {
return [f(head)] + map(f, tail)
} khác {
return []
}
}

映射函数nếu属于 kiểu A -> B这意味着它映射 MỘT 类型的元素类型为 B 的元素,因此 bản đồ必须传递类型为 [A] 的数组.然后,使用 cuộc thi đấu我们可以调用变量和可选绑定(bind) nếu在榜首[f(head)]并将其放入新列表中,然后附加递归 bản đồ 的结果调用其余的数组元素 map(f, tail) .

为了更好地理解他们试图实现的 map 功能:

nhập mô tả hình ảnh ở đây

关于swift - 想帮助理解这个 Swift 黑客,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531715/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress