[prev in list] [next in list] [prev in thread] [next in thread]
List: ruby-core
Subject: [ruby-core:44771] [ruby-trunk - Feature #6367] #same? for Enumerable
From: "pabloh (Pablo Herrero)" <pablodherrero () gmail ! com>
Date: 2012-04-30 14:35:43
Message-ID: redmine.journal-26335.20120430233542 () ruby-lang ! org
[Download RAW message or body]
Issue #6367 has been updated by pabloh (Pablo Herrero).
#same_elements?
or
#same_members?
----------------------------------------
Feature #6367: #same? for Enumerable
https://bugs.ruby-lang.org/issues/6367#change-26335
Author: prijutme4ty (Ilya Vorontsov)
Status: Feedback
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category:
Target version:
I realised that I frequently test if all objects in enumerable have the same feature. \
For example if all words have the same length (but not defined before). So I found \
particulary useful method Enumerable#same_by? that test this behaviour. I think it \
can be simply rewritten in C and included to Enumerable core methods. Simple ruby \
implementation can be written just in a pair of lines (tests included):
module Enumerable
def same?(&block)
return true if empty?
if block_given?
first_result = yield(first)
all?{|el| first_result == yield(el)}
else
first_result = first
all?{|el| first_result == el}
end
end
end
require 'test/unit'
class TestEnumerableSame < Test::Unit::TestCase
def test_same
assert_equal(true, [1,3,9,7].same?(&:even?))
assert_equal(true, [4,8,2,2].same?(&:even?))
assert_equal(false, [1,8,3,2].same?(&:even?))
assert_equal(true, %w{cat dog rat}.same?(&:length))
assert_equal(false, %w{cat dog rabbit}.same?(&:length))
assert_equal(true, %w{cat cat cat}.same?)
assert_equal(false, %w{cat dog rat}.same?)
assert_equal(true, [].same?(&:length))
assert_equal(true, [].same?)
end
end
--
http://bugs.ruby-lang.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic