```
pub fn binary<A, B, F, O>(
a: &PrimitiveArray<A>,
b: &PrimitiveArray<B>,
op: F,
) -> Result<PrimitiveArray<O>, ArrowError>where
A: ArrowPrimitiveType,
B: ArrowPrimitiveType,
O: ArrowPrimitiveType,
F: Fn(<A as ArrowPrimitiveType>::Native, <B as ArrowPrimitiveType>::Native) -> <O as ArrowPrimitiveType>::Native,
```

## Expand description

Given two arrays of length `len`

, calls `op(a[i], b[i])`

for `i`

in `0..len`

, collecting
the results in a `PrimitiveArray`

. If any index is null in either `a`

or `b`

, the
corresponding index in the result will also be null

Like `unary`

the provided function is evaluated for every index, ignoring validity. This
is beneficial when the cost of the operation is low compared to the cost of branching, and
especially when the operation can be vectorised, however, requires `op`

to be infallible
for all possible values of its inputs

## §Error

This function gives error if the arrays have different lengths