Jestem nowy dla Ruby i mam dziwny problem z metodą wstrzykiwania.Klasa zerowa przy użyciu wtrysku Ruby
Kiedy zrobić:
(1..10).inject(0) {|count,x| count + 1}
wynik wynosi 10, zgodnie z oczekiwaniami. Ale kiedy zrobić
(1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)}
pojawia się błąd:
NoMethodError: undefined method `+' for nil:NilClass
from (irb):43
from (irb):43:in `inject'
from (irb):43:in `each'
from (irb):43:in `inject'
from (irb):43
ja naprawdę nie rozumiem dlaczego (prawdopodobnie) licznik jest zerowa w drugim przykładzie, ale nie pierwszy. W każdym razie, w jaki sposób mogę liczyć równości od 1 do 10 za pomocą wstrzyknięcia?
Jeśli używasz Ruby 1.8.7+, można również użyć Enumerable count #, to znaczy '(1..10) .count (&:? Nawet)' –
Jak urocze !! - –
Dzięki! Teraz ma to sens. Jeśli chodzi o efektywność, czy sposób wstrzykiwania jest lepszy, ponieważ nie powoduje on powstawania dodatkowej matrycy? W tym przykładzie nie ma to większego znaczenia, ale co by było, gdybyśmy wybrali 1000 wartości z dużo większego zakresu? –