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 ...
Get Think Julia now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.