Chapter 17. Multiple Dispatch
In Julia you have the ability to write code that can operate on different types. This is called “generic programming.”
In this chapter I will discuss the use of type declarations in Julia, and I will introduce methods that offer ways to implement different behavior for a function depending on the types of their arguments. This is called “multiple dispatch.”
Type Declarations
The ::
operator attaches type annotations to expressions and variables, indicating what types they should have:
julia>
(
1
+
2
)
::
Float64
ERROR: TypeError: in typeassert, expected Float64, got Int64
julia>
(
1
+
2
)
::
Int64
3
This helps to confirm that your program works the way you expect.
The ::
operator can also be appended to the lefthand side of an assignment, or included as part of a declaration:
julia>
function
returnfloat
()
x
::
Float64
=
100
x
end
returnfloat (generic function with 1 method)
julia>
x
=
returnfloat
()
100.0
julia>
typeof
(
x
)
Float64
The variable x
is always of type Float64
and the value is converted to a floating point if needed.
A type annotation can also be attached to the header of a function definition:
function
sinc
(
x
)
::
Float64
if
x
==
0
return
1
end
sin
(
x
)
/
(
x
)
end
The return value of sinc
is always converted to type Float64
.
The default behavior in Julia when types are omitted is to allow values to be of any type (Any
).
Methods
In “Time”, we defined a struct named MyTime
and you wrote a function named printtime
:
using
Printf
struct
MyTime
hour
::
Get Think Julia now with the O’Reilly learning platform.
O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.