Как объединить это в Ruby - PullRequest
0 голосов
/ 25 марта 2012

Мне нужна помощь, чтобы объединить 2 переменные в 1 переменную или любой другой метод для использования этих переменных вместе ...

Мое намерение состоит в том, чтобы создать генератор ascii, в котором ему нужно показать определенное слово, чтобы сгенерировать его ... в этом примере я хочу показать только слово "a", но не могу, функция print print печатает содержимое переменной " ([0,4]) ", мне нужно объединить переменные и обработать их как команду, а не как строку ...:

# encoding:utf-8

threexfive = '
    #         #      ##     
 ## ### ### ### ###  #  ### 
# # # # #   # # ##  ### # # 
### ### ### ### ###  #   ## 
                    ##  ### 
'

# The long of the letters a to f
threexfive_longs = '
a=[0,4]
b=[4,4]
c=[8,4]
d=[12,4]
e=[16,4]
f=[20,4]
'
string = ''
word = 'a'

word.each_char do |char|
  $long = threexfive_longs.split(char).last.split(']').first.split('=').last + "]"

 threexfive.each_line do |type|

   # This don't works:
   string = type + $long
   print string


   # But this works  :(
   # print type[20,4], type[0,4], type[8,4], type[16,4], "\n"

 end 
end

Вот разница:

   # This doesn't work:
   string = type + $long
   print string

Выход:

Output

   # But this works  :(
   print type[0,4], "\n"

Выход:

Output

1 Ответ

6 голосов
/ 25 марта 2012

Вы можете попробовать составить все строки по отдельности, а затем объединить их с join("\n"), как в следующем примере. Я настоятельно рекомендую использовать правильную структуру данных для позиций символов (или «длинных», как вы их назвали). В этом примере я использовал хеш.

# encoding:utf-8

threexfive = ' 
    #         #      ##     
 ## ### ### ### ###  #  ### 
# # # # #   # # ##  ### # # 
### ### ### ### ###  #   ## 
                    ##  ### 
'

char_pos = { 
  :a => 0..3,
  :b => 4..7,
  :c => 8..11,
  :d => 12..15,
  :e => 16..19,
  :f => 20..23
}

word = 'cafe'

result = Array.new(threexfive.lines.count){''}     # array with n empty lines
word.each_char do |char|
  pos = char_pos[char.to_sym]                      # get position of char
  threexfive.lines.each_with_index do |line,index|
    next if index == 0                             # first line of threexfive is empty -> skip
    result[index] << line[pos]                     # compose individual lines
  end 
end
result = result.join("\n")                         # join the lines with \n (newline)

puts result                                        # print result

вывод этой программы:

         ##     
###  ##  #  ### 
#   # # ### ##  
### ###  #  ### 
        ##      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...