草庐IT

swift - Symbol 被认为是标识符,而不是运算符

coder 2023-09-05 原文

我想在我的软件中实现一个货币运算符,它接受一个 double 值并返回一个货币类型以进行更精确的计算。

自定义运算符的代码基本上看起来有点像这样。请忽略精度的明显下降以及此形式中无用的运算符。

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

3.50£ // returns Int(3)

这在 Swift 中运行良好。有趣的是,尽管我在尝试使用 € 符号完全相同时遇到了错误。

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

这会产生错误 '€' is considered to be an identifier, not an operator。我不明白为什么这是不允许的。

最佳答案

自定义运算符中允许的字符在 The Swift Programming Language 中列出, 而 € 不是其中之一。 (您还可以找到相应的 Lexer code )。

这两个货币符号之间的主要区别是 £(还有 ¢¥)在 Latin-1 补充 block 中(U+0080 – U+00FF),而 位于货币符号 block (U+20A0 – U+20CF) 中,出于某种原因,Swift 语言将它们视为类标识符而不是类似于运算符。

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

    • .
    • /=-+!*%<>&|^~?
    • Latin-1 增补:¡¢£¤¥¦§©«¬®°±¶»¿×÷
    • 一般标点符号:‖‗†‡•‣․‥…‧‰‱′″‴‵‶‷‸‹›※‼‽‾⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞
    • 箭头(U+2190 – U+21FF):整 block
    • 数学运算符(U+2200 – U+22FF):整 block
    • 杂项技术(U+2300 – U+23FF):整 block
    • 方框图 (U+2500 – U+257F):整 block
    • block 元素 (U+2580 – U+259F):整个 block
    • 几何形状(U+25A0 – U+25FF):整 block
    • 杂项符号 (U+2600 – U+26FF):整个 block
    • 标志符号 (U+2700 – U+27BF):除了带圆圈的数字 ❶–❿,➀–➉,➊–➓
    • 杂项数学符号-A (U+27C0 – U+27EF):整 block
    • 补充箭头-A (U+27F0 – U+27FF):整 block
    • 盲文图案 (U+2800 – U+28FF):整 block
    • 补充箭头-B (U+2900 – U+297F):整 block
    • 杂项数学符号-B (U+2980 – U+29FF):整 block
    • 补充数学运算符 (U+2A00 – U+2AFF):整 block
    • 杂项符号和箭头(U+2B00 – U+2BFF):整 block
    • 补充标点符号 (U+2E00 – U+2E7F):整 block
    • CJK 符号和标点符号:、。〃〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠〡〢〣〤〥〦〧〨〩〪〭〮〯〫〬〰
  • 运算符的其余部分也可以是这些字符之一:

    • 组合变音符号 (U+0300 – U+036F):整 block
    • 组合变音符补充(U+1DC0 – U+1DFF):整 block
    • 组合符号的变音符号 (U+20D0 – U+20FF):整 block
    • 变体选择器(U+FE00 – U+FE0F):整 block
    • 组合半分 (U+FE20 – U+FE2F):整 block
    • 变体选择器补充(U+E0100 – U+E01FF):整 block
  • A .仅当第一个字符是 . 时才能出现在运算符的其余部分.

关于swift - Symbol 被认为是标识符,而不是运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37204271/

有关swift - Symbol 被认为是标识符,而不是运算符的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  3. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  4. ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称? - 2

    已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb

  5. ruby - 带括号和 splat 运算符的并行赋值 - 2

    我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

  6. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  7. ruby - 在好的 Ruby 代码中没有注释是否被认为是可以接受的? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion我审查了一些用Ruby编写的专业代码,没有发现任何评论。代码读起来相当清晰,但没有self记录。我应该期望专业编写的Ruby代码有注释吗?或者,是否有一些Ruby原则认为注释不是必需的?

  8. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  9. ruby - 定义自定义 Ruby 运算符 - 2

    问题是:除了在“OperatorExpressions”?例如:1%!2 最佳答案 是的,可以创建自定义运算符,但有一些注意事项。Ruby本身并不直接支持它,但是superatorsgem做了一个巧妙的把戏,将运算符链接在一起。这允许您创建自己的运算符,但有一些限制:$geminstallsuperators19然后:require'superators19'classArraysuperator"%~"do|operand|"#{self}percent-tilde#{operand}"endendputs[1]%~[2]#Out

  10. ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字 - 2

    什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta

随机推荐