2013-12-19 3 views
0

Мне нужно создать Struct с несколькими полями (на основе длинной строки). Вот то, что я до сих пор:Создать структуру из строки?

s = "a1|b2|c3|" 
a = s.split("|") 
b = [] 
a.each { |e| 
    b.push(e.to_sym) 
} 

Str = Struct.new(*b) 

Во всяком случае, чтобы сделать его короче?

+3

Всякий раз, когда это вопрос о том, «как я могу улучшить это», это флаг, что вопрос, вероятно, принадлежит на HTTP: //codereview.stackexchange .com. –

ответ

1

Узор b = []; a.each {|e| b << (do something with e) } всегда может быть сокращен до использования map. Итак:

s = "a1|b2|c3" 
b = s.split('|').map {|e| e.to_sym } 

Или, еще более лаконично:

s = "a1|b2|c3" 
b = s.split('|').map(&:to_sym) 
2

Здесь:

Str = Struct.new(*"a1|b2|c3|".split("|").map(&:to_sym)) 
Смежные вопросы