Larry Wall writes: Larry Wall writes: > > I guess the real question would be, is it an overall simplification to > allow "has" anywhere? There *is* an object out there representing each > abstract closure (pre-instantiation), but it's a bit of a stretch from > "Every block is a closure" to "Every block is a closure that is also > an object except that the object in question doesn't participate in > the closure's closure, as it were." >
after reading this I realize that current meaning of "has" is really quite strange... I would rather call it "serve" ( see below ) one can think of class / object attributes in the following way ( I have in mind plan9 notion of every process having its own vision of the namespace , ( and every block / closure in perl _is_ in some sence process ) ) : object attributes : persistent lexical variables . Class _multiplexes_ them to each object and each object have its own private instance of it . class attributes : persistent lexical variables . Class serve the same copy of it to all its subs/methods so class is in some sence a server of a namespace . Class Foo { has $foo ; # persistent lexical variable serve $bar; # every instance of Class Foo will have its own private # version of $bar # or may be this. multiplex $bar; ... } so now is clear _who_ "has" and "serve" : the surrounding closure ( marked by "Class Foo" _has_ ( persistent ) $foo lexical and it _serve_ $bar instance to each object . since its all about ( lexical ) namespaces ... method "new" return an object to which class serve its ( own ) private copy of all variable marked by "serve" ( or multiplex ??? ) I dont know how classes and objects work now inside , but probaly in the spirit of "class is just ...." any block which have some sort of label / mark ( and Class Foo is just one of that kind ) may have a "new" method . in that case the thing returned have private copyes of variables labeled by "serve" and access to all "has" variable and methods/subs defined inside. counter: { has $a; serve $.cnt; my sub count(){ .cnt++ } my sub new() { $a++ ; ret new counter } } $x = counter.new ; $x.count ; just ( veryy fuzzy ) thoughts ... sorry for this mess ... arcadi