Ruby Обнаруживает метод

Выбор имеет смысл. Но кто-то может объяснить .detect мне? Я не понимаю эти данные.

>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,6) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,7) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(2,7) }
=> 2
>> [1,2,3,4,5,6,7].detect { |x| x.between?(1,7) }
=> 1
>> [1,2,3,4,5,6,7].detect { |x| x.between?(6,7) }
=> 6
>> [1,2,3,4,5,6,7].select { |x| x.between?(6,7) }
=> [6, 7]
>> [1,2,3,4,5,6,7].select { |x| x.between?(1,7) }
=> [1, 2, 3, 4, 5, 6, 7]
34
задан JZ. 7 June 2010 в 02:57
поделиться

3 ответа

Detect возвращает первый элемент в списке, для которого блок возвращает TRUE. Ваш первый пример:

>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3

Возвращает 3, потому что это первый элемент в списке, который возвращает TRUE для выражения x.between?(3,4).

detect прекращает итерацию после того, как условие возвращает истину в первый раз. select будет выполнять итерацию до тех пор, пока не будет достигнут конец списка ввода, и вернет все элементы, для которых блок вернул true.

75
ответ дан 27 November 2019 в 16:13
поделиться

ruby-docs - отличный ресурс, если вы хотите узнать о методах.

Enumerable # detect

5
ответ дан 27 November 2019 в 16:13
поделиться

detect просто возвращает первое значение, удовлетворяющее предикату, если оно есть, иначе nil. select возвращает все значения, удовлетворяющие предикату. a.detect { p } аналогичен a.select { p }[0]

 irb(main):001:0> [1,2,3].detect { true }
 => 1
 irb(main):002:0> [1,2,3].detect { false }
 => nil
 irb(main):003:0> [1,2,3].detect { |x| x % 2 == 0 }
 => 2
9
ответ дан 27 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: