What's the secret to static class members

chmike via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 29 12:10:18 PDT 2016


On Wednesday, 29 June 2016 at 17:00:49 UTC, Guido wrote:
> On Wednesday, 29 June 2016 at 15:40:57 UTC, Andrea Fontana 
> wrote:
>> On Wednesday, 29 June 2016 at 15:33:58 UTC, Guido wrote:
>>> The problem is actually much more profound. The classes need 
>>> to be declared outside the main() scope. WTF?!?!?!
>>>
>>> I put them in main() so they would be in scope. This seems 
>>> like a *MAJOR* design flaw with the language, not to mention 
>>> the compiler not giving useful feedback. This decision, if it 
>>> is a decision, makes no sense given all the attention to 
>>> scoping rules.
>>>
>>> I'm not interested in trading one set of bad language 
>>> decisions for another. Can someone fix this?
>>
>> I wonder which language you usually use in your programming 
>> experience.
>
> C++
>
> I have all this business generally working in C++. I just 
> wanted to try D for a production level quick project. So, the 
> language is not ready. I'm really sad about this. I had hoped 
> that I could get some useful work done. C++ is painfully slow 
> to write & debug, but what can you do.
>
> As I said, why exchange one set of bad design decisions for 
> another?
>
> On another topic, tuples seem to have a major problem as well.
>
> Tuple!(float, float, float) test;
> Tuple!(float, float, float) [] array_data;
>
> test[0] = 1.0;  // works
> array_data[i][0] = 1.0; // doesn't work. Compile-time error,

Why don't you give at least the compiler error and the full code ?
If you don't want to publish your actual code, create a very 
small program reproducing the problem and show that to us.

I understand your frustration, but understand that there are many 
people here that volunteer to help you. You have to provide them 
sufficient info for this to work.


    Tuple!(float, float, float) [] array_data;

This declares a dynamic array that is initially empty 
(array_data.length == 0).
Accessing the i'th item can't work.

I'm a bit surprised the compiler would detect this problem 
because it is usually a run time error. So I suspect there are 
other problems with your code.


You could also have written

array_data ~= test;

which appends the value test to the dynamic array that will then 
contain one element. You could then have written

array_data[0][0] = 2.0;


Or you could also have written

Tuple!(float, float, float) [10] array_data;

which would have declared array_data as a fixed sized array of 10 
tuples.
In this case writing

array_data[1][0] = 1.0;

would have worked.


D is an excellent and mature language. Every language has its 
rules that needs to be learn.

Claiming the problems you encountered are due to bad design of 
the language is unfair if you don't expose clearly the problem 
and verify the problem is not your side. There is a deeply 
thought rationale for every rule of the D language.
If you don't understand the rationale or want to contest the 
choice of rules, then expose your point and arguments. People 
will helpfully answer you.

I did it myself and was always impressed by the quality of the 
responses and positive and helpful attitude of people in this 
forum.



More information about the Digitalmars-d-learn mailing list