Thread overview
Array of Algebraic argument syntax
Sep 22, 2020
Kasra Sadeghi
Sep 22, 2020
Ali Çehreli
Sep 22, 2020
Kasra Sadeghi
Sep 22, 2020
Ali Çehreli
September 22, 2020
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, 2020
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, 2020
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, 2020
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