Home » Modeling » Epsilon » Using Collection.excluding(item)
Using Collection.excluding(item) [message #14546] |
Fri, 27 March 2009 13:01 |
No real name Messages: 92 Registered: July 2009 |
Member |
|
|
Hi there,
In Epsilon, I had wanted to use the Collection.excluding(someObj)
operation to do some bits and bobs, but am not sure if I fully understand
how it is meant to work, or if it works as intended.
In the book pdf it says the operation, excluding, will return a new
Collection minus the specified object (someObj above). Does this mean the
operation does not modify the original Collection? I had assumed this was
the case. However, in the EGL at the end of this message, I find that
'excluding' seems to modify the original Collection:
Could anyone confirm whether or not this is in fact a problem? Any
clarification would be much appreciated.
Thanks!
Edd
---- BEGIN EGL ----
[%
-- make some collection and add 6 elements to it
var os : OrderedSet;
os.add('a1');
os.add('a2');
os.add('a3');
os.add('a4');
os.add('a5');
os.add('a6');
%]
---------------------------------------------------------
In the following, I thought E1 and E2 would produce
the same output if the set, os, is not modified during
evaluation of the 'excluding' operation:
---------------------------------------------------------
[%os.excluding(os.at(0));%]
[%='E1 : os = '+os%]
[%os.excluding(os.at(0));%]
[%='E2 : os = '+os%]
---- END EGL ----
|
|
|
Re: Using Collection.excluding(item) [message #14577 is a reply to message #14546] |
Fri, 27 March 2009 16:27 |
No real name Messages: 92 Registered: July 2009 |
Member |
|
|
Hi again,
Looking more closely at this issue and the Epsilon source in
org.eclipse.epsilon.eol.types, I noticed that the operation, excluding, in
EolCollection, initiates the calls:
[Collection] createCollection(this.storage)
->
[EolOrderedSet] createCollection(this.storage)
->
new EolOrderedSet(this.storage)
->
EolSet(this.storage)
where EolSet is:
public EolSet(Collection col){
storage = col;
}
... and so this sequence of calls results in a new EolSet being created,
which sets storage = col, and in this case col = this.storage (where this
is the original caller of excluding). So, createCollection does indeed
make a new EolSet, but it stores the original Collection. I may have got
this totally wrong, in which case I apologise!! Anyway, continuing that
trail of thought, is it the case that we want the EolSet constructor to
create a new HashSet? That is:
public EolSet(Collection col){
storage = new HashSet(col);
}
Changing the constructor to this seems to give the result that I
originally expected,
i.e., the following doesn't modify the contents of the os object.
> ...
> [%os.excluding(os.at(0));%]
> ...
Any suggestions are greatly appreciated.
Many thanks in advance.
Edd
|
|
|
Re: Using Collection.excluding(item) [message #14607 is a reply to message #14577] |
Sun, 29 March 2009 17:42 |
Dimitrios Kolovos Messages: 1776 Registered: July 2009 |
Senior Member |
|
|
Hi Edd,
I do recall this issue in an earlier version of Epsilon, as well as
fixing it. Could you please update to the latest version (0.8.4) and
give it another go?
If memory serves well, you have both the binaries and the SVN code of
Epsilon in your Eclipse instance. I've found that this can sometimes
confuse Eclipse and result in loading the wrong versions of the plugins,
so I'd suggest keeping only one of the two (preferably the SVN version
so that you can pick up future bug-fixes more easily).
Cheers,
Dimitris
Edward Turner wrote:
> Hi again,
>
> Looking more closely at this issue and the Epsilon source in
> org.eclipse.epsilon.eol.types, I noticed that the operation, excluding,
> in EolCollection, initiates the calls:
>
> [Collection] createCollection(this.storage)
> ->
> [EolOrderedSet] createCollection(this.storage)
> ->
> new EolOrderedSet(this.storage)
> ->
> EolSet(this.storage)
>
> where EolSet is:
>
> public EolSet(Collection col){
> storage = col;
> }
>
> .. and so this sequence of calls results in a new EolSet being created,
> which sets storage = col, and in this case col = this.storage (where
> this is the original caller of excluding). So, createCollection does
> indeed make a new EolSet, but it stores the original Collection. I may
> have got this totally wrong, in which case I apologise!! Anyway,
> continuing that trail of thought, is it the case that we want the EolSet
> constructor to create a new HashSet? That is:
>
> public EolSet(Collection col){
> storage = new HashSet(col);
> }
>
> Changing the constructor to this seems to give the result that I
> originally expected,
> i.e., the following doesn't modify the contents of the os object.
>> ...
>> [%os.excluding(os.at(0));%]
>> ...
>
> Any suggestions are greatly appreciated.
>
> Many thanks in advance.
>
> Edd
>
|
|
| |
Re: Using Collection.excluding(item) [message #566181 is a reply to message #14546] |
Fri, 27 March 2009 16:27 |
No real name Messages: 92 Registered: July 2009 |
Member |
|
|
Hi again,
Looking more closely at this issue and the Epsilon source in
org.eclipse.epsilon.eol.types, I noticed that the operation, excluding, in
EolCollection, initiates the calls:
[Collection] createCollection(this.storage)
->
[EolOrderedSet] createCollection(this.storage)
->
new EolOrderedSet(this.storage)
->
EolSet(this.storage)
where EolSet is:
public EolSet(Collection col){
storage = col;
}
... and so this sequence of calls results in a new EolSet being created,
which sets storage = col, and in this case col = this.storage (where this
is the original caller of excluding). So, createCollection does indeed
make a new EolSet, but it stores the original Collection. I may have got
this totally wrong, in which case I apologise!! Anyway, continuing that
trail of thought, is it the case that we want the EolSet constructor to
create a new HashSet? That is:
public EolSet(Collection col){
storage = new HashSet(col);
}
Changing the constructor to this seems to give the result that I
originally expected,
i.e., the following doesn't modify the contents of the os object.
> ...
> [%os.excluding(os.at(0));%]
> ...
Any suggestions are greatly appreciated.
Many thanks in advance.
Edd
|
|
|
Re: Using Collection.excluding(item) [message #566203 is a reply to message #14577] |
Sun, 29 March 2009 17:42 |
Dimitrios Kolovos Messages: 1776 Registered: July 2009 |
Senior Member |
|
|
Hi Edd,
I do recall this issue in an earlier version of Epsilon, as well as
fixing it. Could you please update to the latest version (0.8.4) and
give it another go?
If memory serves well, you have both the binaries and the SVN code of
Epsilon in your Eclipse instance. I've found that this can sometimes
confuse Eclipse and result in loading the wrong versions of the plugins,
so I'd suggest keeping only one of the two (preferably the SVN version
so that you can pick up future bug-fixes more easily).
Cheers,
Dimitris
Edward Turner wrote:
> Hi again,
>
> Looking more closely at this issue and the Epsilon source in
> org.eclipse.epsilon.eol.types, I noticed that the operation, excluding,
> in EolCollection, initiates the calls:
>
> [Collection] createCollection(this.storage)
> ->
> [EolOrderedSet] createCollection(this.storage)
> ->
> new EolOrderedSet(this.storage)
> ->
> EolSet(this.storage)
>
> where EolSet is:
>
> public EolSet(Collection col){
> storage = col;
> }
>
> .. and so this sequence of calls results in a new EolSet being created,
> which sets storage = col, and in this case col = this.storage (where
> this is the original caller of excluding). So, createCollection does
> indeed make a new EolSet, but it stores the original Collection. I may
> have got this totally wrong, in which case I apologise!! Anyway,
> continuing that trail of thought, is it the case that we want the EolSet
> constructor to create a new HashSet? That is:
>
> public EolSet(Collection col){
> storage = new HashSet(col);
> }
>
> Changing the constructor to this seems to give the result that I
> originally expected,
> i.e., the following doesn't modify the contents of the os object.
>> ...
>> [%os.excluding(os.at(0));%]
>> ...
>
> Any suggestions are greatly appreciated.
>
> Many thanks in advance.
>
> Edd
>
|
|
| |
Goto Forum:
Current Time: Thu Sep 26 02:41:25 GMT 2024
Powered by FUDForum. Page generated in 0.02792 seconds
|