Re: DMD won't compile re-init of variable

2020-01-31 Thread Minty Fresh via Digitalmars-d-learn

On Thursday, 30 January 2020 at 21:36:53 UTC, Adam D. Ruppe wrote:

On Thursday, 30 January 2020 at 21:09:41 UTC, Simon wrote:

How do I revert my variable to the init state?


null is the initial state for those.


More generally, .init can be used as to get the initial state for 
any type.


ie.
  m_string2edge = typeof(m_string2edge).init;




Re: foreach for string[string]AA

2017-03-01 Thread Minty Fresh via Digitalmars-d-learn
On Tuesday, 28 February 2017 at 18:16:45 UTC, Anton Pastukhov 
wrote:
On Tuesday, 28 February 2017 at 17:16:43 UTC, Daniel Kozák 
wrote:

V Tue, 28 Feb 2017 15:15:00 +
Anton Pastukhov via Digitalmars-d-learn
 napsáno:


I can't see the logic in AA foreach order. Consider this code:
...
Output:
three
two
one
four

I was sure output should be
one
two
three
four


https://forum.dlang.org/post/xbanhtkvrizyqjcib...@forum.dlang.org


Thank you for the link, it was informative reading. It's a pity 
that still there is no ordered AA at least as a library type.


Ordered AA isn't that common a use case, and it's not without 
overhead. You essentially need to store an array of keys that 
define iteration order, which requires extra memory allocations 
(and, depending on implementation, may slow down iteration as 
well).


I come from a Ruby background, so I have found key order useful 
in the past, but in most cases I probably could've gotten by just 
fine with an array or set of element pairs.


Introduction of a more convenient tuple type into D might make 
something like this easier.


Re: Getting nice print of struct for debugging

2017-02-24 Thread Minty Fresh via Digitalmars-d-learn

On Saturday, 25 February 2017 at 01:27:09 UTC, Minty Fresh wrote:
On Wednesday, 22 February 2017 at 11:18:15 UTC, Martin 
Tschierschke wrote:

[...]


Since structs are Plain-old Data and don't do inheritance, the 
best option is a template mixin.


ie.

  template mixin PrettyPrint
  {
  string toString()
  {
  // . . .
  }
  }

From there, you can mix it into any struct you want.

  struct MyStruct
  {
  mixin PrettyPrint;
  }

If you're familiar with Rails, this is similar to a Concern.


Errata on that. Should actually be declared as:

  mixin template PrettyPrint()

This is why I shouldn't make posts from my phone.


Re: Getting nice print of struct for debugging

2017-02-24 Thread Minty Fresh via Digitalmars-d-learn
On Wednesday, 22 February 2017 at 11:18:15 UTC, Martin 
Tschierschke wrote:
On Tuesday, 21 February 2017 at 14:02:54 UTC, Jacob Carlborg 
wrote:

[...]

Yes, this works, I would say this is the simplest:

MyStruct s;

foreach (index, name ; FieldNameTuple!MyStruct)
writefln("%s: %s", name, s.tupleof[index]);

If you want something more close to "send" in Ruby, you need 
to use a string mixin, like this:


foreach (name ; FieldNameTuple!MyStruct)
writefln("%s: %s", name, mixin("s." ~ name));

The string mixin example works for methods, opDispatch and 
similar as well. The tupleof example, the first one, works 
only for fields.

Exactly what I was looking for, **thank you!**
Both ways of accessing the struct elements are very interesting,
giving an impression what is possible with D.


Is it possible to overwrite "toString" for all structs in one 
step?


Regards mt.


Since structs are Plain-old Data and don't do inheritance, the 
best option is a template mixin.


ie.

  template mixin PrettyPrint
  {
  string toString()
  {
  // . . .
  }
  }

From there, you can mix it into any struct you want.

  struct MyStruct
  {
  mixin PrettyPrint;
  }

If you're familiar with Rails, this is similar to a Concern.


Re: Convert struct to set of fields and pass it's to constructor

2017-02-01 Thread Minty Fresh via Digitalmars-d-learn

On Wednesday, 1 February 2017 at 13:37:27 UTC, Suliman wrote:

Class constructor accept only set if fields like
this(string login, string pass)

Can I create structure, fill it, and than pass to constructor?

Like this:
```
import std.stdio;

struct ConnectSettings
{
string login;
string pass;
};
ConnectSettings cs;

void main()
{
 cs.login = "admin";
 cs.pass = "mypass";
}
```

and than pass to constructor it's like:

`... new SomeClass(cs)`


I tried, but get error, that ctor accept only fields list. Can 
I unroll struct to it?


tupleof is probably what you're looking for.
ie.

  new SomeClass(cs.tupleof);

That said, why not have the constructor accept the struct as a 
parameter?