From: matz@... Date: 2020-02-05T14:17:57+00:00 Subject: [ruby-core:97065] [Ruby master Bug#16609] #select not working with blocks properly Issue #16609 has been updated by matz (Yukihiro Matsumoto). Status changed from Open to Closed `#sample` do not take blocks. They are just ignored. It's one of the limitations of Ruby language. Matz. ---------------------------------------- Bug #16609: #select not working with blocks properly https://bugs.ruby-lang.org/issues/16609#change-84165 * Author: LukeH7789 (Luke Hill) * Status: Closed * Priority: Normal * ruby -v: 2.7.0 / 2.6.5 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- I've tagged this as Bug, as it may be a bug, it may be a uncoded / partially working feature. Observe the following is possible ``` a = [1, 2, 3, 4, 5, 6] a.select(&:even?) #=> [2, 4, 6] a.select { |e| e.even? } #=> [2, 4, 6] a.sample #=> 3 (For example) a.select(&:even?).sample #=> 2 or 4 or 6 ``` However, running `#sample` with a block doesn't complain or throw an error. So the following code runs (But doesn't execute correctly). ``` a.sample(&:even?) #=> 1 or 3 or 5 is **expected** a.sample { |e| e.even? } #=> 1 or 3 or 5 is **expected** ``` But if you run the second snippet you can get any number from 1 to 6. Here is a few runs ``` 2.7.0 :004 > a.sample => 3 2.7.0 :005 > a.sample(&:even?) => 1 2.7.0 :006 > a.sample(&:even?) => 2 2.7.0 :007 > a.sample(&:even?) => 6 2.7.0 :008 > a.sample(&:even?) => 3 2.7.0 :009 > a.sample(&:even?) => 2 ``` -- https://bugs.ruby-lang.org/ Unsubscribe: