符号被视为标识符,而不是运算符

Kil*_*ian 5 swift

我想在我的软件中实现一个货币运算符,它采用Double并返回Currency类型以进行更精确的计算.

自定义运算符的代码基本上看起来像这样.请忽略这种形式的明显精度下降,因此无用的操作员.

postfix operator £ { }
postfix func £(number: Double) -> Int {
    return Int(number)
}

3.50£ // returns Int(3)
Run Code Online (Sandbox Code Playgroud)

这在Swift中运行良好.有趣的是,虽然我在尝试与€符号完全相同时遇到错误.

postfix operator € { }
postfix func €(number: Double) -> Int {
    return Int(number)
}
Run Code Online (Sandbox Code Playgroud)

这会产生错误'€' is considered to be an identifier, not an operator.我不遵循为什么不允许这样做.

ken*_*ytm 8

自定义运算符中允许的字符列在Swift编程语言中,而€不是其中之一.(您也可以找到相应的Lexer代码).

两个货币符号之间的主要区别在于£(以及¢¥)在Latin-1补充块(U + 0080 - U + 00FF)中,而在货币符号块中(U + 20A0-U) + 20CF),由于某种原因,Swift语言将这些视为标识符而不是类似运算符.

  • 运算符的第一个字符必须是以下之一:

    • .
    • /=-+!*%<>&|^~?
    • Latin-1补充: ¡¢£¤¥¦§©«¬®°±¶»¿×÷
    • 一般标点符号: ??†‡•???…?‰????????‹›?????????????????????????????????
    • 箭头(U + 2190-U + 21FF):整块
    • 数学运算符(U + 2200 - U + 22FF):整块
    • 其他技术(U + 2300 - U + 23FF):整块
    • 箱体图(U + 2500 - U + 257F):整块
    • 块元素(U + 2580-U + 259F):整块
    • 几何形状(U + 25A0 - U + 25FF):整块
    • 杂项符号(U + 2600 - U + 26FF):整块
    • 标志(U + 2700 - U + 27BF):除了带圆圈的数字❶-❿,➀-➉,➊-All
    • 杂项数学符号-A(U + 27C0 - U + 27EF):整块
    • 补充箭头-A(U + 27F0-U + 27FF):整块
    • 盲文图案(U + 2800 - U + 28FF):整块
    • 补充箭头-B(U + 2900-U + 297F):整块
    • 其他数学符号-B(U + 2980 - U + 29FF):整块
    • 补充数学运算符(U + 2A00 - U + 2AFF):整个块
    • 其他符号和箭头(U + 2B00 - U + 2BFF):整块
    • 补充标点符号(U + 2E00 - U + 2E7F):整个块
    • CJK符号和标点符号: ????????????????????????????????????????????
  • 运算符的其余部分也可以是以下字符之一:

    • 组合变音标记(U + 0300-U + 036F):整块
    • 组合补充变音符号(U + 1DC0 - U + 1DFF):整个块
    • 符号的变音符号组合(U + 20D0 - U + 20FF):整块
    • 变化选择器(U + FE00 - U + FE0F):整个块
    • 组合半标记(U + FE20 - U + FE2F):整块
    • 变量选择器补充(U + E0100 - U + E01FF):整块
  • .只有当第一个字符是a时,A 才会出现在运算符的其余部分..