将字符串转换为关键字

时间:2011-10-06 13:30:28

标签: ruby parsing keyword

我们可以轻松地将关键字转换为字符串:

true.to_s
=> "true"

但是如何将字符串转换为关键字?

5 个答案:

答案 0 :(得分:6)

你有多少个关键词?您对“关键字”的定义是什么?

我会用case-command实现。您可以为String定义to_keyword方法。我的实现检测到true,false,nil(或NULL)。检测到字符串,忽略大写(TRUE也将是true)其他字符串将返回一个符号(字符串本身将是另一个合理的结果)。

该示例可以适用于更多“关键字”或其他结果。

class String
  #Return 'keyword'
  #Detects:
  #- true (independend of lower letters/capitals)
  #- false (independend of lower letters/capitals)
  #- nil/NULL (independend of lower letters/capitals)
  def to_keyword
    case self
      when /\Atrue\Z/i; true
      when /\Afalse\Z/i; false
      when /\Anil\Z/i, /\ANULL\Z/; nil
      else; self.to_sym #return symbol. Other posibility: self.
    end
  end
end


p 'true'.to_keyword #true
p 'TRUE'.to_keyword #true
p 'false'.to_keyword #false
p 'NULL'.to_keyword #nil  (NULL is used in DB like nil)
p 'NULLc'.to_keyword #:NULLc  not detected -> symbol

答案 1 :(得分:3)

试试这个:

ruby-1.9.2-p136 :001 > true
 => true 
ruby-1.9.2-p136 :002 > eval("true")
 => true

答案 2 :(得分:2)

你可以试试yaml:

require "yaml"
p YAML.load('true')
p YAML.load('TRUE')
p YAML.load('false')
p YAML.load('nil')
p YAML.load('NULL') #nil

答案 3 :(得分:1)

我最喜欢克努特的答案。我不认为我会支持“Null”和其他人。 这是一个更简单的版本。

class String
  def to_keyword
    self == "true"
  end
end

>> "true".to_keyword
=> true
>> "false".to_keyword
=> false

这个问题很简单。在你的测试中你可以简单地

:correct => (true_string == "true")

答案 4 :(得分:-2)

根据你的评论,你可以这样做:

true_string = "true"

:correct => !!true_string

# examples
!true_string #=> false
!!true_string #=> true
!!!true_string #=> false
...