Ruby: строка автоматической кавычки, а не другие данные, при записи в файл? - PullRequest
2 голосов
/ 23 сентября 2009

Я пишу небольшую библиотеку, которая записывает данные в файл. некоторые данные являются строками, а некоторые нет - такими, как логические (true / false) значения ...

когда у меня есть строка для данных, я хочу записать строку в файл с кавычками вокруг нее. поэтому строка типа «это строка данных» будет записана в файл с кавычками вокруг него.

когда у меня есть другие типы данных, например, логическое значение, я хочу записать логическое значение в файл без кавычек вокруг него. поэтому false будет записано как false - без кавычек.

существует ли способ автоматически заключать / не заключать в кавычки значение переменной, в зависимости от того, является ли переменная, содержащая значение, строкой, при записи в файл?

Ответы [ 4 ]

5 голосов
/ 23 сентября 2009

Простейшее - #inspect

--------------------------------------------------------- Object#inspect
     obj.inspect   => string
------------------------------------------------------------------------
     Returns a string containing a human-readable representation of
     _obj_. If not overridden, uses the +to_s+ method to generate the
     string.

        [ 1, 2, 3..4, 'five' ].inspect   #=> "[1, 2, 3..4, \"five\"]"
        Time.new.inspect                 #=> "Wed Apr 09 08:54:39 CDT 2003"

Вы можете проверить это в IRB.

irb> "hello".inspect
#=> "\"hello\""
irb> puts _
"hello"
#=> nil
irb> true.inspect
#=> "true"
irb> puts _
true
#=> nil
irb> (0..10).to_a.inspect
#=> "[0,1,2,3,4,5,6,7,8,9,10]"
irb> puts _
[0,1,2,3,4,5,6,7,8,9,10]
#=> nil

Но для общих типов вы можете рассмотреть YAML или JSON.

1 голос
/ 23 сентября 2009

Это один из способов сделать это:

if myvar.class == String
  #print with quotes
else
  #print value
end
0 голосов
/ 23 сентября 2009

Предположим, что ваши данные имеют текстовый тип, затем выполните

data.match(/true|false/).nil? ?  "'#{data}'" : data

должно быть то, что вы хотите.

0 голосов
/ 23 сентября 2009

Вы пробовали использовать kind_of?.

Пример: variable.kind_of? String

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