2010-10-31 3 views
0

Я хотел бы разбить и выполнить подстановку в строке в одной цепочной команде. Вот мой пример, включая сообщение об ошибке:Цепочки цепочечных методов (split, gsub) в Ruby

>> filebase 
=> "Ueki_-_Hello_World" 
>> filebase.split("_-_").gsub("_"," ") 
NoMethodError: private method `gsub' called for ["Ueki", "Hello_World"]:Array 
    from (irb):16 

Это работает, когда я сохранить результат «раскола» во временной переменной. Мне это действительно нужно?

ответ

5

String#split возвращает Array. Array s не имеют метода gsub.

Непонятно, что именно вы пытаетесь достичь. Это то, что вы ищите?

filebase.split("_-_").map {|s| s.gsub("_"," ") } 
+0

Ах, да, вы правы. Огромное спасибо! – Bernd

+1

Чтобы быть техническим, у него нет общедоступного метода 'gsub', просто частного для использования по ключевым словам. –

+1

Чтобы быть еще более техническим, 'Kernel' имеет частный' gsub' метод, который наследует 'Array'. –

0

Вы можете использовать либо карту или собирать:

filebase.split("_-_").map {|s| s.gsub("_"," ") } 
filebase.split("_-_").collect {|s| s.gsub("_"," ") } 
Смежные вопросы