【发布时间】:2011-08-05 13:56:26
【问题描述】:
F# 2.0 语言规范的Section 3.6(符号关键字)列出了符号关键字?? (双问号)作为今天使用(即,不作为留作将来使用)。它的目的是什么? msdn上的Symbol and Operator Reference (F#)里没有提到,好像不是OCAML符号,也没见过使用的例子。
编辑
一个可以想象的答案是??是一个为将来使用而保留的符号关键字,它被意外放置在符号关键字列表中,而不是未来的符号关键字。这会很奇怪,有两个原因:
- 未来符号关键字列表仅包含两个条目:~ 和 `,并且它直接放在另一个列表之下。未来的符号关键字非常突出,规范编写者不太可能忘记它。
- Section 3.7 (符号运算符) 声明没有库或用户定义的符号运算符必须以问号开头,除了后期绑定运算符 ?和?
【问题讨论】:
-
规范说它被视为关键字。这是否一定意味着它正在使用中?我可以告诉你,不是。
-
@Daniel - 我想你的评论作为一个很好的答案。 (也就是说,符号关键字
??今天使用作为符号关键字保留以备将来使用 :-)) -
@Daniel:这个答案对我来说没问题,只要它确认我作为该语言的“用户”没有错过任何东西。但是 - 只是出于好奇 - 我仍然想知道编译器内部的目的是什么,特别是因为没有其他这样的特殊符号。
-
@Marc:我敢猜测它还没有被定义。这似乎只是一种保留它以备将来使用的方式。为什么 F# 团队决定将其视为关键字而不是“保留供将来使用”(例如“方法”、“纯”等)我不知道。
-
@Marc - 我认为 F# 团队只是保留了一些语法以防他们以后需要它并希望避免破坏性更改。例如,有建议将
foo?Bar添加到C# 作为一个运算符,如果foo != null则调用Bar。 F# 已经使用foo?Bar进行动态调用,因此它可能使用foo??Bar(为此或其他)。如果没有经过特殊处理,您可以定义运算符??并且可能的更改会破坏您的代码...(EDIT(阅读您的评论后)-是的,我不太确定为什么它没有被列为未来使用。那可能是规范错误)