我正在尝试为编程任务创建一个标题化方法,它会使某些单词大写并忽略其他单词。它总是将第一个词大写。为此,我创建了一个方法来查找字符串的第一个单词,并尝试在titleize方法中调用它。我收到一条错误,上面写着“警告:条件字符串文字”。我试过改变if循环的措辞,但它没有修复我的错误。任何人都可以解释为什么我的代码被破坏了吗?非常感谢你的帮助!
def first_word(str)
array = str.split(' ')
return array[0]
end
def titleize(str)
words = str.split
words.each do |word|
if word != first_word(str)
word.capitalize!
elsif word != 'and' or 'the'
word.capitalize!
end
words.join ' '
end
end
答案 0 :(得分:1)
更改以下内容
elsif word != 'and' or 'the'
到
elsif word != 'and' or word != 'the'
答案 1 :(得分:1)
运营商!=
的优先级高于or
。这意味着这一行
elsif word != 'and' or 'the'
相当于
elsif (word != 'and') or 'the'
而不是
elsif word != ('and' or 'the')
你可能没想到的那样。后者的等价应表示为
elsif word != 'and' or word != 'the'
但即使在这种情况下它也没有多大意义,而且很难阅读。
您可能想要将链接更改为
elsif !%w(and the).include?(word)
答案 2 :(得分:1)
str = 'abc'
p "hi" if str == '1' or '12'
#=> warning: string literal in condition
或
str = 'abc'
p "hi" if (str == '1' or '12')
#=> warning: string literal in condition
p "hi" if '12'
#=> warning: string literal in condition
这发生在ruby解释器看到你的代码如下:
p "hi" if str == '1' or true
第二个将始终评估为true,因为'12'
始终存在。警告说,您有一个字符串文字boolean
,而不是test
或'12'
,它总是评估为 true
。
所以解决方法如下:
p "hi" if str == '1' or str == '12' #=> "hi"
p "hi" if ['1','12'].include? str #=> "hi"
答案 3 :(得分:0)
不确定这是多么可读。但它很短!
def titleize(str)
str.capitalize.split.map do |word|
%w{and the}.include?(word.downcase) ? word : word.capitalize
end.join(' ')
end