Contracts inheritance
Ali Çehreli
acehreli at yahoo.com
Fri Apr 13 15:23:25 PDT 2012
On 04/13/2012 03:07 PM, Eyyub wrote:
> Hai,
>
> After watching Walter's video at Lang.NEXT, I have wanted to know how
> contracts inheritance works.
>
> In the following code, I don't understand why foo.bar(2) works...but
> with the sames contracts in the foo function it doesn't work.
>
> http://paste.pocoo.org/show/3Ab5IiQk6hTiJ0jAFZWv/
>
> Thanks
Here is the for convenience:
import std.stdio;
interface IFoo
{
void bar(int a)
in
{
assert(a != 1);
}
}
class Foo : IFoo
{
this()
{}
override void bar(int a)
in
{
assert(a != 2);
}
body
{
writeln(a); // 2
}
}
void foo(int a)
in
{
assert(a == 2);
assert(a < 2);
}
body
{
writeln(a);
}
void main()
{
foo(2); // don't pass
Foo foo2 = new Foo;
foo2.bar(2); // pass
}
foo(2) cannot work because of the second assert in the 'in' contract.
foo2.bar(2) passes because passing a single 'in' contract is sufficient.
The 'in' contract of IFoo.bar() requires that a != 1 and it is satisfied
for 2 so bar() can be called with argument 2.
Ali
More information about the Digitalmars-d-learn
mailing list