我们可以轻松地将关键字转换为字符串:
true.to_s
=> "true"
但是如何将字符串转换为关键字?
答案 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
...