【问题标题】:greek char functions (for fun)希腊字符函数(为了好玩)
【发布时间】:2021-01-12 15:49:26
【问题描述】:

为什么我可以写(快速)

func β(a: Double, b: Double) -> Double { exp( lgamma(a) + lgamma(b) - lgamma(a + b) ) }

func Γ(_ x: Double) -> Double { tgamma(x) }

但不是

func √(_ x: Double) -> Double { return sqrt(x) }

【问题讨论】:

  • 您尝试阅读文档了吗?规则非常明确。

标签: swift language-implementation


【解决方案1】:

请参阅 Swift 语言参考中的 Identifiers

标识符以大写或小写字母 A 到 Z、下划线 (_)、基本多语言平面中的非组合字母数字 Unicode 字符或不在私人使用区域中的基本多语言平面之外的字符开头。在第一个字符之后,还允许使用数字和组合 Unicode 字符。

β 和 Γ 都是“基本多语言平面中的非组合字母数字 Unicode 字符”。 √ 不是(也不符合任何其他要求)。

也就是说,√是一个有效的运算符,所以你可以这样写:

prefix operator √
prefix func √(_ x: Double) -> Double { return sqrt(x) }
print(√2)

运营商的基本规则(来自上面的文档)是:

自定义运算符可以以 ASCII 字符 /、=、-、+、!、*、%、、&、|、^、? 或 ~ 之一或在下面的语法(其中包括来自数学运算符、杂项符号和 Dingbats Unicode 块等的字符)。在第一个字符之后,还允许组合 Unicode 字符。

√包含在“数学运算符”中。

【讨论】:

  • 通用版prefix func √<T: FloatingPoint>(_ x: T) -> T { x.squareRoot() }
【解决方案2】:

Swift 中的平方根字符appears to be a valid operation identifier

Character Unicode Value Unicode Name
221A SQUARE ROOT

您是否检查了最后一个没有return 关键字的方法声明?

func √(_ x: Double) -> Double { sqrt(x) }

【讨论】:

  • return 关键字在单行闭包中是可选的。您的方法也会抛出错误一元运算符实现必须具有“前缀”或“后缀”修饰符
  • 感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多