Contracts inheritance
Eyyub
Eyyub.pangearaion at gmail.com
Mon Apr 16 11:15:46 PDT 2012
On Friday, 13 April 2012 at 22:23:25 UTC, Ali Çehreli wrote:
> 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
Mhh ok thanks.
So, why overrides a contract if the assert is not checked at
runtime ?
Eyyub,
More information about the Digitalmars-d-learn
mailing list