Issue #13210 has been updated by Jonathan Harker.

Chris Price wrote:
> I discussed this with Matt Robinson, who had been involved to some degree 
> with the original ticket.  His recollection was that there were arguments for 
> both of the two approaches--so it does not sound like there was an 
> overwhelming argument in support of the current behavior.
> 
> It seems to me that an important consideration here is: "what is the target 
> audience of the function definition API?"  If we're targeting developers, 
> then I don't think it's unreasonable to expect authors to know that they may 
> need to account for nil or :undef values being passed in as arguments.  If 
> we're targeting a broader audience and making the function definition as 
> simple as possible is the primary goal, then I can perhaps see the case for 
> passing undefs as empty strings.
> 
> My overall take on this, though, is that there are cases in the world where 
> there is a meaningful semantic distinction between "null" and an empty string 
> (plenty of precedent for this in relational databases, etc.), and that our 
> current implementation explicitly prevents users from handling that 
> distinction.  Thus I'd be inclined to mark this ticket as accepted and 
> propose that we change the behavior... probably to passing 'nil'.
> 
> Will leave this ticket open for comments for a while and see if there are 
> strong feelings one way or the other.

I think that, semantically, nil makes more sense than the empty string; but 
ideally undef shouldn't be changed.  I am running into an issue with hiera 
similar Timur.  If I pass undef into hiera as a default value, I expect to get 
undef out on the other side, not the empty string.  If I get nil back, that is 
easier to test for, but I don't think that is something I should **have** to 
test for, it's why I'm giving a default value.
----------------------------------------
Bug #13210: undef changes into '' when passed to function as a param
https://projects.puppetlabs.com/issues/13210#change-60671

Author: Timur Batyrshin
Status: Needs Decision
Priority: Normal
Assignee: Chris Price
Category: 
Target version: Telly
Affected Puppet version: 
Keywords: 
Branch: 


Suppose we have a manifest like that:
<pre>
define foo ( $x = '1' ) {
  notify { "x${x}": }
}

class bar {
  $x = myfunc( undef )
  foo {'no1': x=> $x }
}

class baz {
  $x = undef
  foo {'no2': x=> $x }
}


include bar
include baz
</pre>

With myfunc() defined like that:
<pre>
module Puppet::Parser::Functions
    newfunction(:myfunc, :type => :rvalue) do |param|
      return param
    end
end
</pre>

When applying the manifest we get the following output.
<pre>
notice: x
notice: /Stage[main]/Bar/Foo[no1]/Notify[x]/message: defined 'message' as 'x'
notice: x1
notice: /Stage[main]/Baz/Foo[no2]/Notify[x1]/message: defined 'message' as 'x1'
notice: Finished catalog run in 0.06 seconds
</pre>

However the same message should be produced in both calls to foo.



-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" 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-bugs?hl=en.

Reply via email to