Say I want to be able to set the value of an array to zero where a boolean
mask array is false, then I can define this function:
zero_mask!(a::AbstractArray, mask::AbstractArray{Bool}) = setindex!(a,
zero(T), find(!mask))
I have a function that constructs arrays and part of its job is to call
zero_mask! if a mask is passed to it. I thought I could use Nullable types
so that there is only one implementation rather than two and have helper
methods call the do_stuff with the correct arguments.
function do_stuff(rows, columns, mask::Nullable{AbstractArray{Bool}})
a = rand(rows, columns)
isnull(mask) ? nothing : zero_mask!(a)
a
end
It would be nice to use do_stuff with just a boolean array, rather than
specifying it to be Nullable.
do_stuff(rows, columns, mask::AbstractArray{Bool}) = do_stuff(rows,
columns, Nullable(mask))
do_stuff(rows, columns) = do_stuff(rows, columns,
Nullable{AbstractArray{Bool}}())
However, I get the following error:
do_stuff(10, 3, rand(Bool, 10, 3))
ERROR: MethodError: `do_stuff` has no method matching do_stuff(::Int64,
::Int64, ::Nullable{Array{Bool,2}})
Presumably because I need to define do_study{N}(rows, columns,
Nullable{Array{Bool,N}}). Is there a way to use Nullable abstract types?
Cheers