On 19.12.2011 2:26, Mike Samuel wrote:
2011/12/18 Dmitry Soshnikov<dmitry.soshni...@gmail.com>:
On 18.12.2011 23:18, Mike Samuel wrote:
2011/12/17 Dmitry Soshnikov<dmitry.soshni...@gmail.com>:
Hi,
Just recently was working with Ruby's code. And found useful again its
(actually from Perl) "approximately equal" operator: =~
Perl's =~ operator is more comparable to String.prototype.match than
RegExp.prototype.test.
Perl operators can be used in either scalar or list contexts unlike
ecmascript (see perldoc for wantarray) and it's true that =~ produces
a boolean when used in a scalar context, but since match returns null
on zero matches, it can still be used in conditions. When used in a
non-scalar context, =~ produces a list of the matches:
perl -e 'my $s = "foo"; print join ",", ($s =~ /o/g)'
prints
o,o
Perhaps, I don't know Perl enough. The talk isn't about Perl though. We may
adjust the semantics for ES as _we_ wish, not Perl.
I mistakenly assumed that you were claiming that a feature of your
proposal was developer familiarity with similar syntax in other
languages and that therefore it was worth understanding the semantics
of those features in those other languages to avoid developer
confusion.
No, no, my fault that I explained not so clear, sorry.
Even ignoring order of evaluation, desugaring a ~= b to b.test(a)
would cause the seemingly straightforward
var myRegex = /foo/g; // Used for a global replace in other code.
if ("foo" ~= myRegex) { alert(1); }
if ("foo" ~= myRegex) { alert(2); }
if ("foo" ~= myRegex) { alert(3); }
to alert 1 and 3 only.
Because of lastIndex, I understand. Though nobody says we have to directly
desugar it to .test(...) method. Obviously, it should handle the case
correctly.
I know that you're just testing the waters before writing a strawman
but I can't contribute except by weighing options. In my opinion, as
written, a desugaring based on .test is not the way to go.
I see, and this is OK since I mentioned the `test', and it's also OK "to
test the water" in such case I think, since the feature is new for JS.
<bikeshedding>I don't find the syntactic sugar that sweet. ~=
requires me to use the shift-key, so with paren-less calls,
match/test/exec is clearer and not much longer.</bikeshedding>
Have we already planned paren-free calls? Seems I missed approved
strawman. If so, then yes, we have to think whether we need ~=. After
all, yes, it requires Shift to press and keys are in the opposite sides.
Dmitry.
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss