Thread overview
Error: array operation d1[] + d2[] without assignment not implemented
Sep 13, 2014
deed
Sep 13, 2014
Ilya Yaroshenko
Sep 13, 2014
deed
Sep 13, 2014
Ilya Yaroshenko
September 13, 2014
struct Vector (T)
{
  T[]arr;
  void opSliceAssign (T[] a) { arr[] = a[]; }
}
unittest
{
  auto v = Vector!double([1, 2]);
  double[] d1 = [11, 12];
  double[] d2 = [21, 22];
  double[] d3 = new double[](2);
  d3[] = d1[] + d2[];
  assert (d3 == [11.+21., 12.+22.]);
  assert (is(typeof(d1[] + d2[]) == double[]));
  v[] = d1[]          // Fine
  v[] = d1[] + d2[];  // Error: array operation d1[] + d2[] without assignment not implemented
}

How can opSliceAssign be defined to make this work?
September 13, 2014
On Saturday, 13 September 2014 at 14:18:57 UTC, deed wrote:
> struct Vector (T)
> {
>   T[]arr;
>   void opSliceAssign (T[] a) { arr[] = a[]; }
> }
> unittest
> {
>   auto v = Vector!double([1, 2]);
>   double[] d1 = [11, 12];
>   double[] d2 = [21, 22];
>   double[] d3 = new double[](2);
>   d3[] = d1[] + d2[];
>   assert (d3 == [11.+21., 12.+22.]);
>   assert (is(typeof(d1[] + d2[]) == double[]));
>   v[] = d1[]          // Fine
>   v[] = d1[] + d2[];  // Error: array operation d1[] + d2[] without assignment not implemented
> }
>
> How can opSliceAssign be defined to make this work?

Hi!

struct Vector (T)
{
	T[]arr;
	T[] opSlice() { return arr; }
}
Vector!double v;
double[] d;
v[][] = d[] + d[];

//first [] call opSlise, second [] for array syntax

Best Regards,
Ilya
September 13, 2014
Operations like "ar1[] op= ar2[] op ar3[]" is only for arrays.
There is no operator overloading for this staff.
September 13, 2014
> Hi!
>
> struct Vector (T)
> {
> 	T[]arr;
> 	T[] opSlice() { return arr; }
> }
> Vector!double v;
> double[] d;
> v[][] = d[] + d[];
>
> //first [] call opSlise, second [] for array syntax
>
> Best Regards,
> Ilya

Thanks for your suggestion. It's not as attractive though, it would be the same as v.arr[] = ..., exposing the naked array. The syntax also becomes a bit confusing.

With alias this it works, but functionality is lost. See
http://dpaste.dzfl.pl/35081c1f1745

It feels not consistent, so I guess that's the reason for the "not implemented" message.