为什么这个Ruby方法返回一个";“无效值表达式”;错误?

为什么这个Ruby方法返回一个";“无效值表达式”;错误?,ruby,Ruby,我有这个简单的方法 def is_palindrome?(sentence)   raise ArgumentError.new('expected string') unless sentence.is_a?(String)   safe_sentence = sentence.gsub(/\W+/, '').downcase   return safe_sentence == safe_sentence.reverse end is_palindrome?"rails" 当我运行它时,我

我有这个简单的方法

def is_palindrome?(sentence)
  raise ArgumentError.new('expected string') unless sentence.is_a?(String)
  safe_sentence = sentence.gsub(/\W+/, '').downcase
  return safe_sentence == safe_sentence.reverse
end

is_palindrome?"rails"
当我运行它时,我在第4行得到错误
void值表达式
,这是返回语句


这里怎么了

我知道这个问题早该解决了,但我注意到这个问题没有答案,因为我正在研究这个完全相同的问题。不久前,我遇到了同样的错误,这个错误意味着Ruby试图在您的代码中找到一个
条件更改
,但找不到它。这可能是因为Ruby没有正确读取您的代码,也可能是因为某个地方存在错误。修复它实际上非常容易

def is_palindrome?(sentence)
  raise ArgumentError.new('expected string') unless sentence.is_a?(String)#<= Right here at 'unless' condition is changed
  safe_sentence = sentence.gsub(/\W+/, '').downcase
  return safe_sentence == safe_sentence.reverse
end

is_palindrome?"rails"
如果您想使用正则表达式:

def is_palindrome?(sentence)
  new_sentence = sentence.gsub(/\W+/, '').downcase.reverse
  if new_sentence == sentence.downcase
    return true
  elsif new_sentence != sentence.downcase
    return false
  else
    raise ArgumentError.new("String expected, instead found #{sentence}")
  end
end

is_palindrome?("racecar") #<= Returns true
is_palindrome?("test") <= Returns false
def是回文吗?(句子)
新句子=句子.gsub(/\W+/,'').downcase.reverse
如果新的句子==句子.downcase
返回真值
elsif新句子!=句型
返回错误
其他的
raise ArgumentError.new(“应为字符串,而应为找到的#{SENTURE}”)
结束
结束

是回文的吗?(“赛车”)#即使您的
返回值可以省略,而且通常会被省略,但我没有看到
无效值表达式
。这是文件中的全部代码吗?是的,这就是全部内容,你如何运行它?代码,as-s,对我有用。什么文件的底部?当我在
downcase
之后没有换行符,而是使用空格将其换行到屏幕上的下一行时,我可以重现您的错误消息。验证每一行是否位于单独的行上。另外,尝试在函数中的3行后面各放一个分号,看看这是否有区别。
def is_palindrome?(sentence)
  new_sentence = sentence.gsub(/\W+/, '').downcase.reverse
  if new_sentence == sentence.downcase
    return true
  elsif new_sentence != sentence.downcase
    return false
  else
    raise ArgumentError.new("String expected, instead found #{sentence}")
  end
end

is_palindrome?("racecar") #<= Returns true
is_palindrome?("test") <= Returns false