Swift如何消除泛型构造函数的歧义?

Swift如何消除泛型构造函数的歧义?,第1张

概述考虑以下 Swift表达式 println(Generic<Foo, Bar>(1)) 通常,人们会将其视为对构造函数Generic< Foo,Bar>的通用调用.用参数(1). println( Generic<Foo,Bar>(1) ) 但是,当重新排列令牌时,它也可能代表两个单独的比较,例如,如果Generic和Foo是一些命名不佳的数字变量: println(Generic < Foo, 考虑以下 Swift表达式

println(Generic<Foo,bar>(1))

通常,人们会将其视为对构造函数Generic< Foo,bar>的通用调用.用参数(1).

println( Generic<Foo,bar>(1) )

但是,当重新排列令牌时,它也可能代表两个单独的比较,例如,如果Generic和Foo是一些命名不佳的数字变量:

println(Generic < Foo,bar > (1))// or,with proper parenthesisprintln((Generic < Foo),(bar > 1))

我们在这里可以观察到的是,具有这样的通用构造函数的表达式是非常模糊的,并且即使对于人类也不容易消除歧义.这里的问题是Swift没有构造函数的新关键字,这使得它们在某些情况下与方法调用和运算符不一致.因此,我感兴趣的是Swift编译器(解析器)如何设法消除上述表达式的歧义.它的解析方式取决于上下文(类型,变量,函数)还是可以由解析器解析?

解决方法 答案很简单:编译器根本不允许您声明这些变量:

struct Generic<T,U> {    init(_ i: Int) {}}struct Foo {}struct bar {}print(Generic<Foo,bar>(1))// errorlet Foo = 0      // invalID redeclaration of Foolet bar = 3      // invalID redeclaration of barlet Generic = 5  // invalID redeclaration of Genericprint(Generic<Foo,bar>(1))

在另一个源文件中创建变量或类型声明时,当前声明“覆盖”另一个声明.

总结

以上是内存溢出为你收集整理的Swift如何消除泛型构造函数的歧义?全部内容,希望文章能够帮你解决Swift如何消除泛型构造函数的歧义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存