Ruby String объект пустой или нет?

#ruby-on-rails #ruby #string

#ruby-on-rails #ruby #строка

Вопрос:

У меня есть строка, которая является результатом Ruby on Rails render_to_string

Когда в Ruby debugger это то, что я получаю

 pp string.inspect # ->  blank
pp string         # ->  blank
pp string.Class   # ->  String
pp string.empty?  # ->  false
pp string.nil?    # ->  false
pp string.blank?  # ->  false
pp string.to_s    # ->  blank
  

Я знаю, что в строке есть содержимое, потому logger.info string что возвращает строку, как и ожидалось, но я не знаю, как к ней добраться.

Есть идеи? Спасибо!

РЕДАКТИРОВАТЬ: я понял, что эта проблема очень локализована. Это происходит только тогда, когда я использую ruby-debugger. И это происходит с любой строкой, в которой есть символ процента.

Например, если я создал строку

 string = 'this is a string with a % symbol'
  

строка больше не может быть проверена, распечатана или даже распакована.

Я на Ruby 1.8 и Rails 2.3.

Я думаю, что это может быть лишь частью моего непонимания чего-то мирского в Ruby.

Комментарии:

1. Вероятно, содержит символ новой строки. Что вам string.length дает? Также попробуйте print "[" string "]" .. это также должно помочь «увидеть», что содержит строка. Попробуйте использовать что-то другое, кроме pp , например p , puts или print .

2. строка. длина возвращает 12045. Это длинная строка. Другие вещи не сработали.

3. Попробуйте определить свои собственные String.to_s String.to_str методы and : возможно, какой-то код перезаписывает их и, следовательно, не выводит данные из методов p -type . Также попробуйте p string.display . Также попробуйте распаковать строку в двоичный массив и распечатать ее и посмотреть, что вы получите.

4. Ни encoding один метод не подразумевает Ruby 1.8. Вы могли бы попробовать построить быструю гистограмму, hist = s.chars.inject(Hash.new(0)) { |h,c| h[c] = 1; h } а затем посмотреть, есть ли у вас какие-либо странно выглядящие символы.

5. Почему бы просто не поместить их в качестве ответов на вопрос?

Ответ №1:

Похоже, ваша строка определенно не пуста.

Можете ли вы загрузить расширение hexdump для class String и сделать это:

 require 'hexdump'

#... whatever you do in your program

puts string.hexdump
  

и опубликуйте вывод в своем вопросе?

Таким образом, мы можем видеть, что находится в строке, даже если это непечатаемые символы..

Смотрите:

http://www.unixgods.org /~tilo/Ruby/hexdump.html