加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么这个Ruby方法返回“void value expression”错误?

发布时间:2020-12-17 02:55:08 所属栏目:百科 来源:网络整理
导读:我有这个简单的方法 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.reverseendis_palindrome?"rai
我有这个简单的方法

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值表达式,这是return语句

这有什么不对?

解决方法

我知道这是姗姗来迟的,但我注意到这个问题没有答案,因为我正在研究这个完全相同的问题.我很久以前就遇到了同样的错误,这个错误意味着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"

由于某种原因,你的Ruby版本试图找到条件变化并默认为原始状态,因此需要进行大量研究才能得出结论.

那你怎么解决这个问题呢?快速回答是添加if / else语句而不是除非:

def is_palindrome?(word)      
  to_rev = word.split('')
  rev_arr = to_rev.reverse
  new_word = rev_arr.join('')
  if new_word == word
    return true
  else
    return false
  end
end

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

如果你想使用你的正则表达式:

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

这是完全未经测试但你明白了.这将增加条件的变化,并允许Ruby意识到条件发生了变化.

现在为什么你的系统输出这个?简短的回答是,没有人真正知道,可能是你的系统中有一个错误,可能是你的某个版本的Ruby已经损坏了.

您可以尝试几件事:

>重新安装最新版本的Ruby
>进入系统中的Ruby文件,检查不属于的任何内容
>将目录移动到保证与Ruby,IE一起运行到Ruby目录本身的某个地方. (这真的不应该是一个问题)
>检查您的CPU使用情况,运行程序等,看看是否有任何可能弄乱您的系统的事情
>最后的度假村硬重启你的系统不要这样做,除非你绝对必须,IE你发现一个病毒,如果没有你重新启动就无法擦除.

人们无法重现这个错误的原因可能是因为没有人能真正看到你运行程序的方式,也许你有不同版本的Linux或Windows,无论如何.希望这能回答你的问题..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读