swift – 是否有明确使用空元组()的实例(值),即类型为’Void’的
题:
>对于空元组(),是否有任何可能的显式用法,作为Swift 2.x中的值(而不是类型)? 我知道这些空元组可以在标准意义上用于定义void函数.当我错误地定义了一个具有空元组值var a =()(type())的变量时,我开始想知道这些空元组值是否可以在某些上下文中使用.有谁知道这样的申请? 示例:使用数组和选项可能的应用程序? 作为一个例子,我们可以创建一个可选的空元组数组,当然,它只能包含nil或(): /* Optionals */ var foo: ()? = () print(foo.dynamicType) // Optional<()> var arr : [()?] = [foo] for i in 2...8 { if i%2 == 0 { arr.append(nil) } else { arr.append(foo) } } print(arr) // [Optional(()),nil,Optional(()),... ] 由于空元组的内存占用量很小,对于“boolean nil / not nil”的微内存管理来说这看起来很简洁,但由于Bool类型具有相同的小占用空间,我在这里看不到任何直接用途,即使在(不像)情景中我们真的需要对我们的运营进行低位优化. 也许我只是用一些狭窄的无法使用的应用程序追逐自己的尾巴,但无论如何:这些void()生物是否有任何明确的用途(作为实例,而不是类型)?
当玩“CS”问题时,有许多地方可以使用(),这通常具有“使用Y实现X,即使你真的已经有X”.例如,我可能会说,使用Dictionary实现Set.好吧,词典是键/值对.价值的类型应该是什么?我实际上已经看到这种语言有Dictionaries而不是Sets,人们经常使用1或true作为值.但那并不是你的意思.这开辟了模糊性.如果值是假的怎么办?它是否在集合中?按照词典的方式实现Set的正确方法是[Key:()],然后最后用代码行结束:
set[key] = () 还有其他等效版本,例如您的Optional<()>.我也可以将整数实现为[()]或Set<()>.这有点傻,但我之前做过这样的事情来探索数论. 也就是说,这几乎都是故意不切实际的解决方案.实用的怎么样?这些通常出现在通用编程中.例如,想象一下具有这种形式的函数: func doThingAndReturn<T>(retval: T,f: () -> Void) -> T { f() return retval } 这并不像听起来那么愚蠢.沿着这些线的东西很容易出现在Command模式中.但是,如果没有撤退呢?我不关心回报?嗯,没关系,只需传递一个()值. func doThing(f: () -> Void) { doThingAndReturn((),f: f) } 同样,您可能需要像zipMap这样的函数: func zipMap<T,U>(funcs: [(T) -> U],vals: [T]) -> [U] { return zip(funcs,vals).map { $0($1) } } 这应用了一系列将T取值为T的值的函数.即使T碰巧(),我们也可以使用它,但我们必须生成一堆()值才能使其工作.例如: func gen<T>(funcs: [() -> T]) -> [T] { return zipMap(funcs,vals: Array(count: funcs.count,repeatedValue: ())) } 我不希望在Swift中经常出现这种情况,因为Swift主要是一种命令式语言,几乎在所有情况下都隐藏了它的Void.但是你确实看到像Scala这样的功能语言出现在命令式编程时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |