日記
今月の食費がやばい
今日書いたコード
postfix operator +++ extension Int { static postfix func +++ (operand: Self) -> Self { operand + 2 } } 1 +++ 2 // '+++' is not a binary operator 1 +++2 // '+++' is not a prefix unary operator, Consecutive statements on a line must be separated by ';' 1+++ 2 // Consecutive statements on a line must be separated by ';' 1+++.description
感想
- 演算子の両側に空白があるときはバイナリ演算子として解釈される
- 演算子の左側にのみ空白があるときは単項prefix演算子として解釈される
- 演算子の右側にのみ空白があるときは単項postfix演算子として解釈される
- 演算子の両側に空白がないが,右側に
.
(U+002E)があるときは単項postfix演算子として解釈される
94日目の訂正
ところで,94日目に以下のように書いたがこれは間違いだった.
precedencegroup
を指定しないなら昨日のように手数が少なく書けるということらしい.
precedencegroup
を指定しない場合もoperatorの宣言は必要だった.
struct Some {} extension Some { postfix static func ++ (e: Self) -> Self { e } prefix static func ++ (e: Self) -> Self { e } postfix static func -- (e: Self) -> Self { e } prefix static func -- (e: Self) -> Self { e } // Operator implementation without matching operator declaration postfix static func +++ (e: Self) -> Self { e } // Operator implementation without matching operator declaration prefix static func +++ (e: Self) -> Self { e } // Operator implementation without matching operator declaration postfix static func --- (e: Self) -> Self { e } // Operator implementation without matching operator declaration prefix static func --- (e: Self) -> Self { e } }
pre/postfixの単項演算子++
と--
の宣言が必要ないのは,Swift3以前はSwiftにもそれらがあったからではないかと思う.このproposalが採択されてSwift3以降消えたが宣言は残っている?