A few more thoughts/questions and a potential option:

* Should hash assignments be by reference or by value?  In other words, what
should this do:

    $h1 = { a => b }
    $h2 = $h1
    :
          $h2[x] = y
          notice $h1

  Should the hash in $h2 be a copy of the hash in $h1, or are they the same
object?

* Is array really the right consistency model?  For example, one might argue
that $h should be {content=>bar, mode=>0777} throughout the following:

class c0 {
    file {'/tmp/foo': content => 'bar' }
    $h = { contents => bar}
}

class c1 inherits c0 {
    notice "2: h = $h"
    File['/tmp/foo'] { mode => 0777 }
    $h += { mode => 0777 }
    notice "3: h = $h"
}

notice "1: h = $h"
include c1
notice "4: h = $h"

-----------------------------------------------------------------------------------------------------------------------
To get concrete, what do you think of the following semantics:

* $h1 in the first example above would be distinct from $h2 (assignment is a
copy).
* The value of a hash is the same at all points in all scopes in which the
hash can be seen, and reflects all contributions.
* h += { k1 => v1, k2 => v2...} is syntactic sugar for h[k1]=v1; h[k2]=v2;
...
* Any number of h[kx] =... assignments are allowed each scope, but only one
per key globally
* Hash keys are constrained in some way:
   * they must be literal strings
   * or they may not depend on values from a hash
   * or they may not depend on values in the same hash

-- Markus

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to