Re: Array of Algebraic argument syntax

2020-09-22 Thread Ali Çehreli via Digitalmars-d-learn

On 9/22/20 2:53 PM, Kasra Sadeghi wrote:

On Tuesday, 22 September 2020 at 21:36:48 UTC, Ali Çehreli wrote:

...
alias Value = Algebraic!(int, double, string, None);
...
void main() {
  printValue([Value(4.5), Value("hello"), Value(42)]);
}


Thanks! Wish there was a less redundant syntax for the arrays.




Do you really need to write literal Value arrays? If not, you would 
build a Value[] at runtime without seeing the syntax above.


Still, here is a function template that provides better syntax:

Value[] valueArray(Args...)(Args args) {
  Value[] result;
  foreach (arg; args) {
result ~= Value(arg);
  }
  return result;
}

void main() {
  printValue(valueArray(4.5, "hello", 42));
}

Ali



Re: Array of Algebraic argument syntax

2020-09-22 Thread Kasra Sadeghi via Digitalmars-d-learn

On Tuesday, 22 September 2020 at 21:36:48 UTC, Ali Çehreli wrote:

...
alias Value = Algebraic!(int, double, string, None);
...
void main() {
  printValue([Value(4.5), Value("hello"), Value(42)]);
}


Thanks! Wish there was a less redundant syntax for the arrays.




Re: Array of Algebraic argument syntax

2020-09-22 Thread Ali Çehreli via Digitalmars-d-learn

On 9/22/20 2:30 PM, Kasra Sadeghi wrote:

Hi everyone!

What's the syntax for passing an array of Algebraics?

definition:

  class None {}
  class Value = Algebraic!(int, double, string, None);


That should be 'alias' instead of 'class':

import std.variant;
import std.stdio;

class None {}
alias Value = Algebraic!(int, double, string, None);

void printValue(Value[] values) {
  foreach(value; values) {
value.writeln;
  }
}

void main() {
  printValue([Value(4.5), Value("hello"), Value(42)]);
}

Ali



Array of Algebraic argument syntax

2020-09-22 Thread Kasra Sadeghi via Digitalmars-d-learn

Hi everyone!

What's the syntax for passing an array of Algebraics?

definition:

 class None {}
 class Value = Algebraic!(int, double, string, None);

 void printValue(Value[] values) {
   foreach(value; values) {
 value.writeln;
   }
 }

usage attempts:

 printValue([4.5]);
 printValue(Value[4.5]);
 printValue(Value[](4.5));