Can we make it RawRepresentable? That way signum can just return self.rawValue

Sent from my iPhone

> On May 23, 2016, at 06:05, Charlie Monroe via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 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 
>> <swift-evolution@swift.org> 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 
>>> <swift-evolution@swift.org> 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
>>> swift-evolution@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to