Am 27.03.15 um 21:52 schrieb Robert Hanson: > Interesting idea. Rolf. Are you aware of Jmol's recently added .. notation? > > x = {"a": {"1": ["x", "y", "z"], "2": ["I", "II"]}} > > print x > print x..a > print x..a..1 > print x..a..1..2 > > Does that satisfy your needs? It is only for regular arrays or > associative arrays with simple keys. You can't do this: > Usually my hash keys are contained in variables. And as far as I know the '..' notation doesn't work with variables.
> > Personally, I would not like to try to build Perl-like syntax into Jmol. > Overall it is very unlike C++ or Java or JavaScript, and I've tried to > keep as close to those as possible. In Perl I believe the -> notation is > for /array references:/ > > my @array = (1, 2, 3, 'four'); > my $reference = \@array; > print $reference->[0]; > > not actual array names, right? You can't do this: > > my @array = (1, 2, 3, 'four'); > print $array->[0]; > > right? So I would prefer not to add that confusion to the mix. > Bob, you are right, the '->' is for references. Although it is not limited to array references. So with variable names it can only be used at the second level or higher. But I wasn't suggesting to change that within Jmol. > Ambiguity of ranges: It's not that there is any ambiguity. I assure you > that is not the case. But Jmol's notation is a bit idiosyncratic, I > admit. The fact that the first model in a file was always "1" led me to > develop 1 as the base for array elements. Was it a good choice? Maybe > not. But that's what we have. And the fact that we often want the last > model suggested then that [0] could mean "the last" rather than "the > first". And so we have ranges such as a[3][-3]. It's not ambiguous. But > it is multipurpose. So, as you point out, for associative arrays, > a[1][1] is not a range. (What would a "range" in an associative array > mean, after all.) It must be that "1" is a key in a, and that key > refers to either another associative array with a "1" key or a serial > array with at least one element. (Maybe that's what you mean by > "ambiguous". That's true.) > What I mean by "ambiguous" is that you don't know at first sight what an expression like "x[1][3]" will actually mean. You have to analyze carefully what is contained within "x". The '->' notation would change that. For Jmol it will hopefully be always clear. But for someone looking at foreign or own older code it might take some more time to fully understand it. What I really like with the '->' notation is that it makes working with multi-level data structures in Perl much more efficient for me (saving development and debug time). See for example the following expressions: "if ($x{$key1}[$i][$j]{$key2} eq $y{$key3}[$k][$l]{$key4})" "if ($x{$key1}->[$i]->[$j]->{$key2} eq $y{$key3}->[$k]->[$l]->{$key4})" Regards, Rolf ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Jmol-developers mailing list Jmol-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-developers