哪种编程语言支持常量方法?

时间:2010-03-23 17:39:35

标签: c++ programming-languages

除C ++之外的哪些编程语言支持常量类方法的概念?也就是说,哪些语言允许程序员以这样的方式约束方法,即保证不改变应用该方法的对象的状态?

请在答案中提供示例或参考。

7 个答案:

答案 0 :(得分:4)

Haskell,因为它是purely functional

实际上,每个值/方法在Haskell中都是常量,即使可变状态/ IO可以通过名为monad的数学结构建模。

答案 1 :(得分:3)

默认情况下,所有纯函数式语言都是const,因为纯函数式语言没有要更改的状态。

答案 2 :(得分:3)

我相信Fortran(我认为95或更高)有你想要的东西。巧合的是,它被称为“纯子程序”。

http://www.soks.org/view/Fortran95ForFortran77Programmers#pure_routines

http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=/com.ibm.xlf91a.doc/xlflr/pure.htm

答案 3 :(得分:2)

根据this Wikipedia entry,许多其他面向对象的语言(如Java和C#或Microsoft的C ++ / CLI)中都没有此功能。

纯函数式语言,如HaskellCurry,http://en.wikipedia.org/wiki/Ωmega_interpreter">Ωmega执行支持 *授权*此功能

答案 4 :(得分:2)

ConstJavaJavari是Java的两种变体,支持常量方法的概念。但是,Javari已经废除了ConstJava。

答案 5 :(得分:2)

由于您将其标记为C ++,我认为您的意思是const这样的方法:

class A {
   int e;
public:
   int doSomething() const { 
      // ++ e;    // Compiler error, change data-member in read-only structure
      return e+1; // OK.
   }
};

(尽管由于mutable成员,C ++的const不是真正的const。)

然后我只知道C ++,D2以及支持这一点的所有功能语言。

  • C# doesn't support const methods但你可以让所有成员readonly。您还可以创建一个readonly包装类/子类。 Java没有const关键字,但是像C#you can make all members final
  • 默认情况下,所有函数式语言都使用const正确的方法,因为函数是纯函数,但它们是否支持面向对象编程是另一个问题。

答案 6 :(得分:0)

也许您可以在.Net中编写自定义属性。您传入的对象可能都必须从同一个类继承,即EntityBase,因此您可以手动确保状态是相同的。