为什么在Dart中有特殊的“密封”课程,我该如何制作?

时间:2014-01-02 11:55:09

标签: compiler-construction programming-languages dart grammar ambiguity

在Dart中似乎有一些特殊的类,例如num,它们通常不能由用户定义的类继承,尽管Dart语法本身没有任何东西阻止它(例如Java {{1}或者C#的final)。不过,内置的sealednum会继承int

  1. 为什么?这种限制不应出现在语言的语法中吗?
  2. 我有什么方法可以自己创建这样的类,这些类部分或完全“密封”以防止继承?

1 个答案:

答案 0 :(得分:2)

以下是https://code.google.com/p/dart/issues/list上发现的来自Dart小组的类似问题的正式答案。

Gilad Bracha在这个场合说:

您几乎可以将int,double,bool,Null和String视为Java中的最终类(num不适合该模具,因为它具有子类型)。根据设计,我们不支持最终类,以最小化复杂性并避免代码无法子类化(就像提交者想要的那样)。我们选择了无法扩展的类型列表,而不是最终的类。

为什么:因为这些对效率至关重要。这不是一个非常纯粹的论点,但实际上大多数人会为更快的系统交换灵活性。

++++++++

RE:我的评论:这真的不是一个非常纯粹的论点,因为这无助于使语言更清晰,更好。

++++++++

这也不是脱离语境,但这是2012年6月29日的官方立场。

也许今天Dart团队还有另一种解释,但只有官方回答所提问题才能获得。

P.S。

Tnanks to ringstaff获得这个答案的链接。

P.S。

如果您想让Dart语言更清晰,更好,请留下您对此官方立场的评论。

在后记中:

  • 这不是灵活性,这是决策的粗略(关于语言设计及其环境的实施)。