作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想简化表达式 if(x == 1 || x == 2)
。
我希望我可以写 if(x == 1 or 2)
但没有相应的语法。
其他可能性是使用 Contains 或 Any 方法,例如:if([1,2].Contains(x))
但这涉及不必要的调用。
我可以创建一些允许我执行此操作的运算符吗?
我可以用 Nemerle 语言编写宏:
macro @|||(left, right)
match (left)
| <[ $x == $y ]> => <[ $x == $y || $x == $right ]>
| _ => Message.Error("Error"); <[ ]>
然后用法:
if (x == 1 ||| 2) { .. }
我可以在 F# 中以这种方式创建运算符吗?
最佳答案
我同意 Brian 的评论,即构造一个宏来保存三个字符可能不是一个好主意。这只会使程序更难阅读(对于那些不知道您的自定义宏或运算符含义改变的人)。
此外,您很可能可以使用模式匹配等标准 F# 结构以更简洁的方式编写相同的逻辑。例如:
match x with
| 1 | 2 -> printfn "yes"
| _ -> printfn "no"
惯用的解决方案将取决于具体情况,很难从您给出的示例中判断。
关于F# 元编程 : is it possible to make IF X = 1 OR 2 syntax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140007/
我是一名优秀的程序员,十分优秀!