What is the problem?

Velocity "truthiness":
https://issues.apache.org/jira/browse/VELOCITY-692

It should definitely be part of 2.0. I missed it because the issue was
closed, we should have opened a 2.0 one to remember it.

Thats's the problem if a closed/resolved issue does not have an
assignee. You never know who handled it without reading the entire
thread. A ticket should always have an assignee if code has been changed.


Here's what had been specified by Nathan at the time (order is meaningful, and falseness seems easier to specify than truth):

$obj is null
$obj is boolean false
$obj returns false from getAsBoolean() (provided there is such a method)
$obj is empty string (CharSequence w/length 0)
$obj returns true from isEmpty() (provided there is such a method)
$obj is array of length 0
$obj returns null from getAsString() (provided there is such a method)
$obj returns empty string from getAsString() (provided there is such a method)
$obj returns null from getAsNumber() (provided there is such a method)
$obj returns 0 from length() or size() (provided there is such a method)
$obj returns empty string from toString() (provided there is such a method)

Regarding this spec:
- I'm not sure about getAsString() ; toString() is usually the standard way of getting the String representation and should be enough. - I'm not convinced by the fact that zero should be true. I hear Nathan's point that for a display language, zero is as legitimate as any other number to be displayed. But it breaks the principle of least surprise, since each and every other language around, when not forbidding number towards boolean implicit conversion, consider zero as false.

So I'd rather go with:

$obj is null
$obj is Boolean false
$obj is Number zero (whatever Number variant)
$obj returns false from getAsBoolean() (provided there is such a method)
$obj is empty string (CharSequence w/length 0)
$obj returns true from isEmpty() (provided there is such a method)
$obj is array of length 0
$obj returns null from getAsNumber() (provided there is such a method)
$obj returns 0 from length() or size() (provided there is such a method)
$obj returns empty string from toString() (provided there is such a method)

Also, I noticed that Velocity weren't very consistent with literals. The only literal returning true is the 'true' literal. "foo" is false, whereas it should be consistent with $foo containing "foo".

  Claude


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to