static this
Max Samuha
maxter at i.com.ua
Sat Oct 7 01:21:03 PDT 2006
On Fri, 06 Oct 2006 16:05:07 -0500, Chris Nicholson-Sauls
<ibisbasenji at gmail.com> wrote:
>Max Samuha wrote:
>> On Fri, 06 Oct 2006 17:24:35 +0300, Max Samuha <maxter at i.com.ua>
>> wrote:
>>
>>
>>>On Fri, 06 Oct 2006 06:53:08 -0600, Hasan Aljudy
>>><hasan.aljudy at gmail.com> wrote:
>>>
>>>
>>>>
>>>>Max Samuha wrote:
>>>>
>>>>>Two questions to the community:
>>>>>
>>>>>1. The following is obviously a bug?
>>>>>
>>>>>class Test
>>>>>{
>>>>> static
>>>>> {
>>>>> this(){}; // defined not as static constructor but as
>>>>>instance constructor
>>>>>
>>>>> ... more static members here
>>>>> }
>>>>>}
>>>>
>>>>As Chris already said, static is not really an attribute, it's just
>>>>"static this".
>>>>
>>>>
>>>>>2. Why module constructor must be attributed with static? All module
>>>>>level methods are already static so the attribute seems to be
>>>>>redundant. Make it optional?
>>>>>
>>>>
>>>>I guess the reason is to be consistent. "static this" refers to a static
>>>>constructor, i.e. a constructor that will be called at the beginning of
>>>>the program's start.
>>>>Module constructors are static constructors, so "static this" is used.
>>>
>>>Ok, that's clear. Anyway, the compiler should issue an error if 'this'
>>>is used in static block. If not, it will be be confusing for newcomers
>>>who will be unlucky enough to use it the way I did.
>>
>>
>> And, IMO, this one shouldn't compile without complaint, either:
>>
>> class Test
>> {
>> static
>> {
>> static this()
>> {
>> writefln("In static ctor");
>> }
>> }
>>
>> static static void foo()
>> {
>> }
>> }
>>
>> void main()
>> {
>> }
>>
>> How do you think?
>
>Would cause a problem with the continuous attribute syntax...
>
># class Test {
># static:
># static this() {}
># void foo () {}
># }
>
>I'd say make it a non-blocking warning, rather than an error.
>
>-- Chris Nicholson-Sauls
Error, warning, anything to let me know about my static constructor
being compiled as instance one.
Btw, i still can't see the reason why D doesn't treat 'static' as an
attribute of 'this' like other static methods? Could anybody explain?
class Test
{
static:
this(){}; // make it static ctor, not instance. it's confusing!
void foo();
}
More information about the Digitalmars-d
mailing list