Project

General

Profile

Actions

Feature #5644

closed

add Enumerable#exclude? antonym

Added by sunaku (Suraj Kurapati) over 12 years ago. Updated over 6 years ago.

Status:
Feedback
Target version:
-
[ruby-core:41086]

Description

Please add Enumerable#exclude? as antonym of Enumerable#include?

This allows me to construct Boolean expressions more pleasantly:

if File.exist? some_file and not some_list.include? some_file

Can be written as:

if File.exist? some_file and some_list.exclude? some_file

Thanks for your consideration.

Updated by trans (Thomas Sawyer) over 12 years ago

Hey, a use for functors!

module Kernel
def not
Functor.new do |op,*a,&b|
!send(op,*a,&b)
end
end
end

some_list.not.include? some_file

Nothing against Enumerable#exclude? though. Seems reasonable.

Updated by mame (Yusuke Endoh) about 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to matz (Yukihiro Matsumoto)

Updated by matz (Yukihiro Matsumoto) about 12 years ago

  • Status changed from Assigned to Feedback

from that logic, don't we need to add antonyms to every predicate methods?
could you show us why include? is special?

Matz.

Updated by sunaku (Suraj Kurapati) about 12 years ago

Hi Matz,

I didn't ask for antonmys for all predicates; only for #exclude?.

The reason for #exclude? is for more "natural" boolean expressions:

if File.exist? some_file and some_list.exclude? some_file
if File.exist? some_file and not some_list.include? some_file

That "not SOMETHING.include? SOMETHING" pattern appears often in my code, so that's why I created this request. Of course, me saying "appears often" does not constitute as solid evidence in support of adding #exclude? so I have no choice but to accept your judgement on this request. It's your call.

Thanks for your consideration.

Updated by trans (Thomas Sawyer) about 12 years ago

I'll throw my hat in with #exclude? too. There's been a number of times that I would have liked to have it. "not include?" is a rather common predication and it's nice when code can line up neatly.

Updated by now (Nikolai Weibull) about 12 years ago

On Thu, Mar 29, 2012 at 01:26, sunaku (Suraj Kurapati) wrote:

Issue #5644 has been updated by sunaku (Suraj Kurapati).

The reason for #exclude? is for more "natural" boolean expressions

I don’t think #exclude? really conveys what’s being done very well.
Yes, “exclude” is the antonym of “include”, but the meaning of %[a b
c].include? x is very natural, whereas %[a b c].exclude? x isn’t.
Does it mean that %[a b c] contains the elements that should be
excluded and is x among them, or is x not included among the elements
of %[a b c]?

Updated by matz (Yukihiro Matsumoto) about 12 years ago

OK, you think negative for include? is special. Understood.
But as Nikolai pointed out, exclude? is not the best name for the function.
Any alternative?

Matz.

Updated by rosenfeld (Rodrigo Rosenfeld Rosas) about 12 years ago

At first I agreed with Nikolay, but then I changed my minded because the method is called "exclude?" with a question mark, not "exclude", so I don't think anyone would expect that it would actually remove some element.

Updated by rosenfeld (Rodrigo Rosenfeld Rosas) about 12 years ago

I think I've misunderstood the question posed by Nikolai. I've just read it again but I think that the other meaning presented by him doesn't make any sense. "does the array contain the elements that should be excluded?". Really? I read this like in English:

Does [1, 3, 5] exclude 4?

Ask someone that doesn't know anything about programming and see what will she answer to this question.

Updated by rosenfeld (Rodrigo Rosenfeld Rosas) about 12 years ago

The most common antonym is "exclude", but maybe we could use "omit" if you prefer:

http://www.synonym.com/antonym/include/

Updated by trans (Thomas Sawyer) about 12 years ago

There really is no better term b/c all such terms are going to have the same connotations.

As with "include" if you add an "s" to the word then it reads more like typical English, i.e. "a excludes b ?". To use the singular form you have to add a modal verb like "does a exclude b ?" Which makes it easy to see that this is the right meaning.

Updated by now (Nikolai Weibull) about 12 years ago

On Fri, Mar 30, 2012 at 16:02, matz (Yukihiro Matsumoto)
wrote:

OK, you think negative for include? is special.  Understood.
But as Nikolai pointed out, exclude? is not the best name for the function.
Any alternative?

How about changing the definition of Enumerable#none?, #any?, and
#all? to take an optional argument that is compared against each
element using #==. Then we have

if File.exist? some_file and some_list.none? some_file

I would not write it like that – I’d still use not a.include? b, which
I think is hard to beat – but then we at least don’t need to come up
with a new name and these three methods gain semantics that I’ve felt
they were lacking.

Updated by mame (Yusuke Endoh) over 11 years ago

  • Target version set to 2.6
Actions #14

Updated by trans (Thomas Sawyer) over 11 years ago

Too bad we can't use symbols like .

Actions #15

Updated by naruse (Yui NARUSE) over 6 years ago

  • Target version deleted (2.6)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0