2017-01-15 10 views
0

Я в настоящее время делаю свой блог с Jekyll. Jekyll custom plugin использует Ruby, а Jekyll использует Liquid. В настоящее время я получаю ввод через пользовательский ярлык и обрабатываю его там. Я хотел бы проверить, содержит ли строка целые числа или нет. Поэтому у меня есть следующий код. Я понял, что вход не относится к типу String, а скорее к типу Jekyll :: Token. Поэтому я изменил входные данные на строку, но не могу определить, содержит ли строка целое число. Вот мой код:Тип Проверка не работает с Ruby и Liquid

module Jekyll 
    class TypecheckTag < Liquid::Tag 

     def is_int(word) 
      return word.count("0-3000") > 0 
     end 

     def initialize(tag_name, word, tokens) 
      super 
      @word = word.to_s 

     end 

     def render(context) 
      if /\A\d+\z/.match(@word) 
       @result = 'int' 
      else 
       @result = 'string' 
      end 
     end 


    end 
end 

Liquid::Template.register_tag('typecheck', Jekyll::TypecheckTag) 

К сожалению, он всегда возвращает строку, даже если у нас есть строка «16», например.

ответ

0

Следующий код отлично работает

def render(input_str) if /\A[-+]?\d+\z/.match(input_str.strip) @result = 'int' else @result = 'string' end end

Sample вход с выходом

p render('16') # "int" 
p render('16a') # "string" 
p render('16 ') # "int" 
p render('asd') #"string" 
p render('') #"string" 

Я использовал strip из render('16 ') # "int" Если вы не хотите игнорировать это. Надеюсь, это поможет вам.

+0

Это не совсем то, что я хочу, но я решил это, получив значение через контекст. –