[swift-evolution] Proposal: Adding precedence option for prefix and postfix operators

肇鑫 owenzx at gmail.com
Sat Jan 16 19:36:27 CST 2016


I think they are already the highest precedence. That why they need not to
be set this property.

Also, I think things like

print(-3**2)
> print(0-3**2)


should never appear in Swift. As it is hard for human to read.

zhaoxin


On Sun, Jan 17, 2016 at 5:21 AM, Maximilian Hünenberger <
swift-evolution at swift.org> wrote:

> +1 for me and as far as values go:
>
> prefix -
> precedence 150, same as infix * since it is essentially (-1)*
>
> prefix +
> same as prefix -
>
>
> To break the least amount of code:
>
> prefix !
> precedence 140, which is higher than any other Bool operator (== is
> highest with 130)
>
> prefix ~
> precedence 170, which is higher than any other binary operator (<< is
> highest with 160)
>
> > Am 16.01.2016 um 16:30 schrieb Jason Nielsen via swift-evolution <
> swift-evolution at swift.org>:
> >
> > Hi all,
> >
> > My proposal is to add a precedence option for prefix and postfix
> operators.  It is great that swift allows for associativity and precedence
> for binary operators but it hasn't quite gone all the way to make operator
> overloading fully functional (just an opinion).  To illustrate consider the
> following code:
> >
> > import CoreFoundation
> >
> > infix operator ** { associativity right precedence 200 }
> >
> > func ** (base: Double, power: Double) -> Double {
> >     return pow(base, power)
> > }
> >
> > print(-3**2)
> > print(0-3**2)
> >
> > which prints 9 and -9.  In the first case because unary minus has higher
> precedence as a prefix operator it evaluates to (-3)*(-3) and the second
> because - is viewed as a binary operator of lower precedence as (0-(3*3).
> Exponentiation has higher precedence than subtraction so -3**2 should be -9
> and the two expressions above are mathematically equivalent.  I originally
> reported this as a bug (SR-552) as to me the point of operator overloading
> is to allow you to write numerical expressions cleanly but should give you
> the correct mathematical result.  The only really useful application I can
> think of for operator overloading is basically as a DSL for numerical
> expressions.  If it doesn't allow you to get correct results without having
> to put brackets everywhere it sort of defeats the purpose (just my opinion
> of course).
> >
> > Best regards,
> > Jason
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160117/8802cf8f/attachment.html>


More information about the swift-evolution mailing list