== Quote from Stanislav Blinov (stanislav.bli...@gmail.com)'s article
On 12/27/2010 06:41 PM, Hamad Mohammad wrote:
If you tried to assign person2 to person1 or vice versa
how?
I don't think I got what David meant with it either. Assigning instances
of the same type is perfectly valid as long as you do not define some
very peculiar opAssign.
Andrej, on the other hand, made a perfect point.
A typedef is deprecated in D2. typedef in D2 differs from C/C++ one.
What typedef does (in the old, D1 way) is introducing a new, distinct
type. Many D constructs, especially templates, can handle only certain
types. Those, depending on conditions, may or may not include
user-defined types.
writeln requires that a given value is 'formattable' to string. It knows
how to deal with numerics, strings, arrays, structs and classes. But it
does not put out assumptions on unknown types (and typedef'd type is
unknown to D's type system). There are some ways to introduce your
types to certain constructs. For example, if you do
writeln(person1) in your code, you'll get Human on the console - this
is a default way writeln handles structs. But if you define a method
toString for your Human struct, e.g:
import std.conv;
struct Human
{
//...
string toString()
{
return text(name, : , age);
}
}
, then writeln(person1) would output ': 12' to the console.
(Mind that this 'toString' idiom may change, which is the effect of
recent discussions about this certain topic).
Generally, if you want a distinct type in D2, define a struct (or a
class if you want your type to have reference semantics). If you want a
simple alias to existing type, use alias declaration (alias is an
analog of C/C++ typedef, though the keyword itself does more than this.
You can find out additional uses in documentaion or The D Programming
Language book).
At this point, language gurus should start throwing rotten tomatoes at
my general location, but I tried to explain the thing in the easiest way
I could.
thanks