Method `|()
- Method
`|
mixed
`|(mixed
arg1
)
mixed
`|(mixed
arg1
,mixed
arg2
,mixed
...extras
)
mixed
`|(object
arg1
,mixed
arg2
)
mixed
`|(mixed
arg1
,object
arg2
)
int
`|(int
arg1
,int
arg2
)
string
`|(string
arg1
,string
arg2
)
array
`|(array
arg1
,array
arg2
)
mapping
`|(mapping
arg1
,mapping
arg2
)
multiset
`|(multiset
arg1
,multiset
arg2
)
type
`|(program
|type
arg1
,program
|type
arg2
)- Description
Bitwise or/union.
Every expression with the
|
operator becomes a call to this function, i.e.a|b
is the same aspredef::`|(a,b)
.- Returns
If there's a single argument, that argument is returned.
If there are more than two arguments, the result is:
`|(`|(
.arg1
,arg2
), @extras
)Otherwise, if
arg1
is an object with an lfun::`|(), that function is called witharg2
as argument, and its result is returned.Otherwise, if
arg2
is an object with an lfun::``|(), that function is called witharg1
as argument, and its result is returned.Otherwise the result depends on the argument types:
arg1
can have any of the following types:int
Bitwise or of
arg1
andarg2
.zero
UNDEFINED may be or:ed with multisets, behaving as if it was an empty multiset.
string
The result is a string where each character is the bitwise or of the characters in the same position in
arg1
andarg2
. The arguments must be strings of the same length.array
The result is an array with the elements in
arg1
concatenated with those inarg2
that doesn't occur inarg1
(according to `>, `<, `==). The order between the elements that come from the same argument is kept.Every element in
arg1
is only matched once against an element inarg2
, so ifarg2
contains several elements that are equal to each other and are more than their counterparts inarg1
, the rightmost remaining elements inarg2
are kept.mapping
The result is like
arg1
but extended with the entries fromarg2
. If the same index (according to hash_value and `==) occur in both, the value fromarg2
is used.multiset
The result is like
arg1
but extended with the entries inarg2
that don't already occur inarg1
(according to `>, `< and `==). Subsequences with orderwise equal entries (i.e. where `< returns false) are handled just like the array case above.type
|program
Type union of
arg1
andarg2
.The function is not destructive on the arguments - the result is always a new instance.
- Note
If this operator is used with arrays or multisets containing objects which implement lfun::`==() but not lfun::`>() and lfun::`<(), the result will be undefined.
The treatment of UNDEFINED with multisets was new in Pike 8.1.
- See also