Front page | perl.perl6.language |
Postings from April 2012
The "=" operator and context
Thread Next
From:
Daniel Carrera
Date:
April 3, 2012 08:10
Subject:
The "=" operator and context
Message ID:
CAEaabNjUEY-3nMpJc1zQH_bSU9c0SNPibLdvpK3PXwLqE3TRJA@mail.gmail.com
Hello.
We are all familiar with this:
(1..10).WHAT # => Range()
@foo = 1..10;
@foo.WHAT # => Array()
When you assign a range to @foo, the result is an array. Something
similar happens, for example, if you assign a scalar to @foo... The
context of the assignment causes Perl 6 to convert the value into an
array.
I was wondering if this sort of magic is limited to pre-defined types
(arrays, hashes, etc) or if it can be extended to any class that I
might create. For example, imagine hat I create a 'Vector' class to do
basic linear algebra. Imagine that it works this way:
my @vec = Vector.new( 1,2,3,4 )
@vec * 3 # => ( 3,6,9,12 )
In other words, the '*' operator is overloaded to behave like scalar x
vector multiplication in linear algebra. I was thinking that it would
be neat if instead you could do this:
my Vector @vec;
@vec = 1,2,3,4;
@vec.WHAT # => Vector()
In other words, the "context" of the "=" sign tells Perl 6 to convert
the array (1,2,3,4) into a Vector() object (presumably using the
.new() method). As an additional example, you could imagine a matrix
class like this:
my Matrix @mat;
@mat = [ \[ 1,2,3], \[3,4,5], \[5,6,7] ];
In my mind, what would happen here is that the array on the right-hand
side (an array of arrays) would be converted into a matrix, which is a
2D object, and you could do regular matrix operations.
Is this sort of thing possible in Perl 6?
Cheers,
Daniel.
--
I'm not overweight, I'm undertall.
Thread Next
-
The "=" operator and context
by Daniel Carrera