The clean way would be to make it an enum with var signum that would return -1,
0, 1:
enum IntegerSign<NumberType: SignedNumberType> {
case Negative
case Zero
case Positive
var signum: NumberType {
switch self {
case .Negative:
return -1 as NumberType
case .Zero:
return 0 as NumberType
case .Positive:
return 1 as NumberType
}
}
}
extension SignedNumberType {
var sign: IntegerSign<Self> {
if self == 0 {
return .Zero
} else if self > 0 {
return .Positive
} else {
return .Negative
}
}
}
Charlie
> On May 23, 2016, at 9:29 AM, Haravikk via swift-evolution
> <[email protected]> wrote:
>
> Could you give an example of this method’s usage? Surely your value is either
> positive, negative or zero already, so this method doesn’t return anything
> more useful.
>
> In other words, anywhere that I might do this:
>
> if myValue.sign > 0 { … }
>
> I could just as easily do:
>
> if myValue > 0 { … }
>
> To the same end result surely? Unless I’m missing something it seems
> redundant.
>
> If there is a use-case for this, would it make more sense to have the return
> type as an enum with cases for Positive, Negative and Zero?
>
>> On 22 May 2016, at 08:07, Adam Nemecek via swift-evolution
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>> Howdy,
>> I think that the SignedNumberType should implement a method called sign that
>> will return -1 for negative numbers, 0 for 0 and 1 for positive numbers.
>> This is similar to the signum method in e.g. Java and similarly called
>> methods in other languages.
>>
>> The implementation is fairly straight forward
>>
>> extension SignedNumberType {
>> var sign: Self {
>> if self == 0 {
>> return 0
>> }
>> else if self > 0 {
>> return 1
>> }
>> return -1
>> }
>> }
>>
>> I was trying to implement is without branching by doing (x > 0) - (x < 0)
>> but I couldn't get the types right so I'm open to suggestions.
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution