Re: Stealing a good idea from Gtk#
- From: muppet <scott asofyet org>
- To: "A. Pagaltzis" <pagaltzis gmx de>
- Cc: kaffeetisch gmx de, gtk-perl-list gnome org
- Subject: Re: Stealing a good idea from Gtk#
- Date: Sun, 26 Sep 2004 21:45:04 -0400
On Sep 26, 2004, at 8:00 PM, A. Pagaltzis wrote:
* Torsten Schoenfeld <kaffeetisch gmx de> [2004-09-26 23:45]:
$button -> Clicked += \&clicked;
i presume you would disconnect a signal with the -= operator?
It's definitely cool. Three things irk me, though:
a) += just isn't used that way in Perl, and I think
overloading its meaning the way its done here is too
idiosyncratic.
less politely, it reeks of the operator overloading abuse that commonly
afflicts C++/C# people. =)
what irks me the most about it is that, yes it's true that you're
adding a handler to the signal, but you're not doing a += operation. a
+= b makes sense where both a and b are "Foo"s. seen in that light,
something like
<signal> += <handler>
makes less sense. say you wanted to get the id from that connection.
you'd now have
<id> = <signal> += <handler>
which makes even *less* sense. shouldn't the resulting value of
Foo+=something still be a Foo?
As far as a) is concerned, the really Perlish way would of course
be a tied array that you can push subrefs onto and delete from...
but ehm, that would be overengineered. :)
(and, actually, impossible. you can find out if there are handlers
connected, and you can block and disconnect, but you can't *list* the
handlers of a signal on a given instance.)
I'm thinking the operator should be a simple assignment, in which
case you can switch from overload to a tied interface, too.
in defense of the += operator, the += makes sense because you can
connect any number of handlers to a signal, while = implies a
Highlander nature ("there can be only one!").
how would you handle variants like connect-after and user data? the
obvious thing to come to mind is (using Aristotle's naming because
StudlyCaps suck)
$window->SIGNAL::delete_event += { handler=>\&my_delete, data
=>$thing, after => TRUE };
$window->SIGNAL::delete_event -= { handler=>\&my_delete, data
=>$thing };
but by comparison with
$window->signal_connect_after (delete_event => \&my_delete, $thing);
$window->signal_handlers_disconnect_by_func (\&my_delete, $thing);
the cool hack way is, well, rather a bit more verbose.
so, i must say i don't like the cool hack, even though it is an
impressive and very cool hack.
--
Brian: If i recall correctly, this is the physics department.
Chris: That explains all that gravity.
-- Family Guy, "The Story on Page One"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]