No registered users in community xowiki
in last 10 minutes
in last 10 minutes
Re: [Xotcl] Can't call protected class method from instances
From: Gustaf Neumann <neumann_at_wu.ac.at>
Date: Fri, 10 Feb 2012 19:07:10 +0100
Dear Arthur,
the call protection of NX is object-centric defined, which is a strong
form of protection. A protected method can be only called if the caller
and the callee are the the same object. In the examples below, caller
and callee differ. In the first case, the caller is an instance, the
callee is the class object, in the seconds case, caller and callee are
two different instances.
So, protection is in nx quite different to class centric approaches
(e.g. Java/C++); it is as well different to ruby protection (where
different instances of the same class can all protected methods).
So, the current behavior is as intended; in general, when you have
convincing evidence, we are always open to relax the nx policy.
-gustaf neumann
Am 10.02.12 11:45, schrieb Arthur Schreiber:
> Hello Gustaf,
>
> Is not being able to call protected class methods from instances intended
> behaviour?
>
> Here is a very simple test case:
>
> package require nx
>
> nx::Class create Greeter {
> :class protected method say_hi {} {
> puts "Hello!"
> }
>
> :public method say_hi {} {
> [:info class] say_hi
> }
> }
>
> [Greeter new] say_hi
>
> Also, protected methods can not be called from instances of the same class,
> e.g.:
>
> package require nx
>
> nx::Class create Greeter {
> :public method say_hi { other_greeter } {
> $other_greeter protected_say_hi
> }
>
> :protected method protected_say_hi { } {
> puts "Hello!"
> }
> }
>
> set g1 [Greeter new]
>
> [Greeter new] say_hi $g1
>
> Kind Regards,
> Arthur
> _______________________________________________
> Xotcl mailing list
> Xotcl_at_alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl
Date: Fri, 10 Feb 2012 19:07:10 +0100
Dear Arthur,
the call protection of NX is object-centric defined, which is a strong
form of protection. A protected method can be only called if the caller
and the callee are the the same object. In the examples below, caller
and callee differ. In the first case, the caller is an instance, the
callee is the class object, in the seconds case, caller and callee are
two different instances.
So, protection is in nx quite different to class centric approaches
(e.g. Java/C++); it is as well different to ruby protection (where
different instances of the same class can all protected methods).
So, the current behavior is as intended; in general, when you have
convincing evidence, we are always open to relax the nx policy.
-gustaf neumann
Am 10.02.12 11:45, schrieb Arthur Schreiber:
> Hello Gustaf,
>
> Is not being able to call protected class methods from instances intended
> behaviour?
>
> Here is a very simple test case:
>
> package require nx
>
> nx::Class create Greeter {
> :class protected method say_hi {} {
> puts "Hello!"
> }
>
> :public method say_hi {} {
> [:info class] say_hi
> }
> }
>
> [Greeter new] say_hi
>
> Also, protected methods can not be called from instances of the same class,
> e.g.:
>
> package require nx
>
> nx::Class create Greeter {
> :public method say_hi { other_greeter } {
> $other_greeter protected_say_hi
> }
>
> :protected method protected_say_hi { } {
> puts "Hello!"
> }
> }
>
> set g1 [Greeter new]
>
> [Greeter new] say_hi $g1
>
> Kind Regards,
> Arthur
> _______________________________________________
> Xotcl mailing list
> Xotcl_at_alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl
-- Univ.Prof. Dr. Gustaf Neumann Institute of Information Systems and New Media WU Vienna Augasse 2-6, A-1090 Vienna, AUSTRIA