Question about pure functions
anonymous
anonymous at example.com
Mon Sep 16 01:08:22 PDT 2013
On Monday, 16 September 2013 at 07:01:52 UTC, Bienlein wrote:
> Hello,
>
> ich habe a pure method bar() in a class Foo:
>
> class Foo {
> int i = 0;
>
> void bar() pure {
> i++;
> }
> }
>
> main() {
> auto foo = new Foo();
> foo.bar()
> }
>
> The pure method bar changes the inst var i. Nevertheless, the
> code above compiles and runs which I find confusing. I assumed
> that changing an inst var by a pure function is considered
> creating a side efect. But the compiler has no problems with
> this.
>
> Am I getting something wrong here? Thanks for any hints.
> Regards, Bienlein
(Weak) pure functions are allowed to mutate their arguments.
Methods take the object via a hidden parameter, so that's an
argument, too.
Mark all parameters const to get a strong pure function. For
"this" const goes on the method:
class Foo {
int i = 0;
void bar() const pure {
// can't mutate i here
}
}
See also: http://dlang.org/function.html#pure-functions
More information about the Digitalmars-d-learn
mailing list