Thread overview
Array of Algebraic argument syntax
September 22
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));

September 22
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

September 22
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.


September 22
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