Issue #13000 has been updated by headius (Charles Nutter).


I would prefer the straightforward implementation, but I have some bias.

In JRuby, the `[]` method generally is *more* expensive, because it *might* be `String#[]` with a Regex, which needs to be able to set `$~`, so we deoptimize some things when `[]` is being called.

What's good for MRI here is bad for JRuby :-)

I guess the real question here is whether it would matter if JRuby just used `Hash#include?` in our version of the library. I think there might be some oddities around nil, but that already seems pretty odd in a Set.

----------------------------------------
Bug #13000: Implement Set#include? with Hash#include?
https://bugs.ruby-lang.org/issues/13000#change-67960

* Author: headius (Charles Nutter)
* Status: Feedback
* Priority: Normal
* Assignee: knu (Akinori MUSHA)
* Target version: 
* ruby -v: 
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Why does `Set#include?` not call `Hash#include?`? Currently it calls `Hash#[]`.

The protocol of Set already use `Hash#include?` for `==`.

```diff
diff --git a/lib/set.rb b/lib/set.rb
index 43c388c..f3dbe2d 100644
--- a/lib/set.rb
+++ b/lib/set.rb
@@ -230,7 +230,7 @@ def flatten!
   #
   # See also Enumerable#include?
   def include?(o)
-    @hash[o]
+    @hash.include?(o)
   end
   alias member? include?
 
```







-- 
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>