Issue #16039 has been updated by sawa (Tsuyoshi Sawada).

JustJosh (Joshua Stowers) wrote:
> I do not think we should use the name cover? because the types of arguments accepted by Range#cover? would be incompatible with this use case.
>
> For example:
> ruby
> (1..3).cover?(2) # true
> 
> But if Array's implementation worked similarly, we would have the following issue:
> ruby
> [1, 2, 3].cover?(2) # true by design of Range#cover?
> [1, 2, 3].cover?([2]) # true because all values in argument are also in self
> [1, [2], 3].cover?([2]) # ?
> 

When the argument is an array, it should be understood as the usual case; i.e., it should be interpreted as the $\subset$ relation. Otherwise, it should be considered as the abbreviated form; in such case, it should be interpreted as the $\in$ relation. So

ruby
[1, [2], 3].cover?([2])


should be unambiguously false. To achieve the interpretation that leads to the true output, you need to write:

ruby
[1, [2], 3].cover?([[2])


That is exactly analogous to how Range#cover works, and there hasn't been a problem there.

----------------------------------------
Feature #16039: Array#contains? to check if one array contains another array
https://bugs.ruby-lang.org/issues/16039#change-83233

* Author: cha1tanya (Prathamesh Sonpatki)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
I woud like to propose Array#contains? which will check if the one array is part of another array.
Implementation can be as follows:


def contains?(other)
(other - self).empty?
end


Some test cases:


[1, 2, 3].contains?([2, 3]) => true
[1, 2, 3].contains?([]) => true
[1, 2, 3].contains?([1, 2, 3, 4]) => false
[].contains?([]) => true
[].contains?([1, 2, 3, 4]) => false


--
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>