[111279] trunk/dports/devel/aqbanking5
Ryan Schmidt
ryandesign at macports.org
Wed Sep 18 22:47:40 PDT 2013
On Sep 19, 2013, at 00:34, MK-MacPorts at techno.ms wrote:
>>> +if {$subport != "aqbanking5-svn"} {
>> == and != are for numeric comparisons. For string comparisons, you should use eq or ne. (Yes, this issue is pervasive and needs to be fixed in a lot of ports.)
>
> Thanks for spotting this one!
> Changed in r111344.
>
> Crazy that even "port lint --nitpick" didn't find this!!!
>
> I suggest to improve the lint command to avoid stuff like this in the future.
>
> (Still, it seems to have worked with "!=" as well.)
Earlier this year someone pointed out on the list that == and != are actually designed for numeric comparisons. If the values can't be interpreted as numbers, Tcl will do a string comparison instead. However, if you already know you want to compare strings, you should use eq and ne to avoid surprises.
It would be nice if lint would catch this type of error, but it's perhaps not very simple to do that in every case. For example:
if {${a} == ${b}} { … }
Is this line correct, or should this == really be eq? It's not possible to know without knowing whether ${a} and ${b} are numbers or strings, and lint doesn't know that.
Lint could perhaps catch a few common occurrences of this error, such as:
if {${a} == "…"} # clearly wrong because the RHS is a string literal
if {{…} != ${a}} # clearly wrong because the LHS is a string literal
if {${name} != ${subport}} # special-case the variables "name" and "subport" because we know they're strings
More information about the macports-dev
mailing list