Hi all,

I have a dilemma:

I currently have a type representing an IP address (it's the IPv4 object 
from socket.jl with some additional constructors) and another type 
representing an IP network. I've extended in and contains  to these 
respective types, so that, for instance, contains(IPv4network("1.2.3.0/24") 
, IPv4("1.2.3.4")) yields true.

Now the issue. I have a dataframe with a column (array) of IPv4networks, 
and an IPv4 address I'd like to test against each element in the array, 
returning the entire dataframe row if the IPv4network contains the IP 
address. I could use a loop, but I think I'd prefer a vector operation (for 
elegance, and so I can learn how to do this properly). That is, I'd like to 
be able to do something like [row for row in df if df[row,:net] contains 
ipaddr] vectorized (and, of course, conditionals aren't allowed in array 
comprehensions in any case).

I've looked into @vectorize_2arg but it doesn't seem to allow for different 
types, and @vectorize_2arg Any IPnetwork.contains throws warnings (though 
it appears to produce the correct output):

julia> @vectorize_2arg Any IPnetwork.contains
Warning: New definition
    contains(AbstractArray{T1,N},T2) at operators.jl:372
is ambiguous with:
    contains(T1,AbstractArray{T2,N}) at operators.jl:370.
To fix, define
    contains(_<:AbstractArray{T1,N},_<:AbstractArray{T2,N})
before the new definition.
contains (generic function with 4 methods)

What's the best way to do this? Thanks for any advice.

Reply via email to