My rough interpretation (which is by no means the official one, as I think 
this is still up for debate), is as follows:, 

1) convert(T,x) is the most specific: it will convert x to type T, throwing 
an error if outside the range (though it can round, for instance when 
converting to a Rational or FloatingPoint type). This can be called 
implicitly, e.g. when assigning to a typed array.
2) T(x) does mostly the same thing, but is slightly more general
 * when T <: FloatingPoint, you can pass extra rounding arguments, e.g. 
Float64(x,RoundDown)
 * in some cases, x can be a string: at the moment this seems to only work 
for BigFloat and BigInt, but perhaps this should apply to other types.
3) x % T is defined only for integer types: the idea is to be a "module 
conversion", and can be faster because no exceptions can be thrown.

Additionally, if x is a FloatingPoint type, then there are also the extra 
methods round(T, x), trunc(T, x), floor(T, x), ceil(T, x) and the 
non-exported Base.unsafe_trunc(T, x).

s

On Saturday, 21 March 2015 00:22:43 UTC+1, Milan Bouchet-Valat wrote:
>
> Le vendredi 20 mars 2015 à 14:03 -0700, Julia User a écrit : 
> > I looked through some of the Base source code and see different things 
> > for conversions. 
> > 
> > c%UInt8 
> > convert(UInt8,x) 
> > UInt8(t) 
> > 
> > to name a few.... 
> > 
> > Any official recommendation for someone starting out new - anything 
> > which is planned to be depreciate soon. 
> I think all of them are OK, but the last one does not have the same 
> behavior: 
>
> julia> UInt8(256) 
> ERROR: InexactError() 
>  in call at base.jl:36 
>
> julia> convert(UInt8, 256) 
> ERROR: InexactError() 
>  in convert at int.jl:160 
>
> julia> 256 % UInt8 
> 0x00 
>
> The first one ends up calling the second one, so I'd say use it since 
> it's shorter. The last one does not check for overflow, so use it only 
> if you really want this behavior. 
>
> In short: in doubt, use the first one. 
>
>
> Regards 
>

Reply via email to