Character 中的 == 是如何定义的?
Posted
技术标签:
【中文标题】Character 中的 == 是如何定义的?【英文标题】:How is == in Character defined? 【发布时间】:2020-04-14 08:58:22 【问题描述】:我看到“é”("\uE9"
,1 个代码点)和“e”+accent("\u65\u301"
,2 个代码点)是相等的,这很棒。
Character
的==
的documentation继承自Equatable
,不解释其规则。另一方面,我环顾四周 Annex #29 没有运气。 Swift 是否实现了自己的逻辑?
在任何一种情况下,Swift 中的字符相等性是如何确定的?
【问题讨论】:
我认为您未提出的问题的答案是,“您需要先手动规范化这两个字符”。 【参考方案1】:由于Swift
是一种开源语言,您可以在 GitHub 上查看内置方法的实现。
你可以找到Character
here的相等运算符。
extension Character: Equatable
@inlinable @inline(__always)
@_effects(readonly)
public static func == (lhs: Character, rhs: Character) -> Bool
return lhs._str == rhs._str
如您所见,在内部,Character
可以从 String
初始化,Character
的 ==
运算符使用该内部 String
属性来比较两个 Character
s。
@frozen
public struct Character
@usableFromInline
internal var _str: String
@inlinable @inline(__always)
internal init(unchecked str: String)
self._str = str
_invariantCheck()
你可以在StringComparable.swift中找到==
对于String
的实现
【讨论】:
以上是关于Character 中的 == 是如何定义的?的主要内容,如果未能解决你的问题,请参考以下文章