|
To make the boolean operators non-commutative you would need to give up on short-circuiting evaluation. For example, consider:
(i <= #xs and xs[i]:isgood())
If you try to evaluate the right operand when the left one is false (to check if it is nil or not) then xs[i] will evaluate to nil and trying to call the isgood method will result in a runtime error.