Может кто-нибудь объяснить мне, почему моя первоначальная константа LIST
с самого начала получает манипулирование в конце? Я думал, что константа может быть только однажды инициализирована. Я хочу сохранить манипуляции в новом массиве (new_list
), не влияя на исходный (LIST
).странное рубиновое поведение с константой
$ned = "foo"
$med = ""
print LIST = [:nrd, :mrd_y] # -> [:nrd, :mrd_y]
list = LIST
new_list = list.delete_if { |element|
case element
when :nrd then $ned.empty?
when :mrd_y then $ned.empty? || $med.empty?
end
}
print new_list # -> [:nrd]
print LIST # -> [:nrd] instead of [:nrd, :mrd_y]
Вы также можете использовать [ 'reject'] (HTTP: // рубиново-док. org/core-2.0/Array.html # method-i-reject), если это делает логику блока более чистой. Я думаю, что подходы 'select' или' reject' будут такими, какие я ожидал бы увидеть в Ruby-коде. –
@muistooshort вы правы! Я какое-то время забыл про «отказ». Спасибо за указатель. обновлено. –
Спасибо за ваши предложения. в обоих случаях мне больше не понадобится промежуточный шаг 'list = LIST', правый (просто' LIST.reject')? – ericMTR