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