【问题标题】:What is wrong with my Ruby case statement syntax? [duplicate]我的 Ruby 案例语句语法有什么问题? [复制]
【发布时间】:2021-10-10 18:08:38
【问题描述】:

我正在尝试从数字字符串中筛选数字并计算每个不同数字的每次出现。 在我看来,我的语法看起来是正确的,但我的 case 语句经常收到语法错误; “出乎意料的‘何时’”。 有人可以告诉我我在这里做错了什么吗?

prime_string = "23571113171923293137414347535961677173798389971011031071091131271311371391"

zeroes = 0
ones = 0
twos = 0

count_array = [zeroes, ones, twos]

def numsort(d)
    case d
    when 0
        zeroes++
    when 1
        ones++
    when 2
        twos++
    else
        puts "err"
    end
end

while prime_string.length > 0 do 
    numsort(prime_string.split.shift)
end

puts count_array

【问题讨论】:

  • 缺少end
  • 哦,嘿,在 ruby​​ 中也没有 ++stackoverflow.com/questions/3717519/… 改用zeroes +=1
  • 感谢您的帮助!
  • 我们可以先将字符串转换为数组:prime_string.chars #=> ["2", "3", "5",..., "9", "1"]。接下来在数组上调用Enumerable#tally 以创建计数哈希prime_string.chars.tally #=> {"2"=>4, "3"=>14, "5"=>3, "7"=>12, "1"=>22, "9"=>8, "4"=>3, "6"=>2, "8"=>2, "0"=>4}。然后使用Hash#values_at构造数组count_arrayprime_string.chars.tally.values_at("0", "1", "2") #=> [4, 22, 4]
  • 我们可以通过两种方式改进这一点。首先,在创建计数哈希之前,从prime_string.chars:prime_string.chars.select { |c| ["0", "1", "2"].include?(c) } #=> ["2", "1", "1", ..., "1"] 生成的数组中只选择感兴趣的元素。其次,如果我们用each_char 替换chars,我们会得到一个枚举器,它比(中间)数组prime_string.chars 需要更少的存储空间。然后我们得到prime_string.each_char.select { |c| ["0", "1", "2"].include?(c) }.tally.values_at("0", "1", "2") #=> [4, 22, 4]

标签: ruby syntax-error case


【解决方案1】:

ruby 中没有++ 运算符。

你需要改写+= 1

虽然由于语法错误,这无疑会导致一些神秘的错误消息,但我要注意以下几点:

  1. 仔细阅读错误信息。它告诉您错误的行号,在这种情况下,它可能应该指向第一次出现的 ++?
  2. 使用更好的 IDE/编辑器设置!在恶劣的环境中编码就像戴着手铐编写软件一样。甚至在尝试运行代码之前,您的编辑器就应该警告您此处的语法无效。

【讨论】:

  • 天啊。这就是我在语言之间切换所得到的......谢谢。我是新手,所以我没有花太多时间和精力学习如何配置 VSC,因为我对自己的偏好和需求没有一个清晰的概念。
  • case 语句中还缺少end -- 这再次告诉我:使用更好的 IDE 设置来警告您语法错误。看起来你正在尝试用 Ruby 编写 Python :)
  • 还有,为什么你所谓的prime_string变量实际上是Integer?字符串必须用引号括起来,切换语言不是这个错误的借口......
  • 还有,在 ruby​​ 中有一个更简单的方法可以做到这一点;核心语言有一个很方便的方法:Enumerable#tally。您可以执行类似prime_string.chars.tallyprime_number.digits.tally 之类的操作。
  • 缺失的结尾和缺失的引号实际上是由于我试图简化我的 SO 代码,尽管 Python3 是我的第一语言。也感谢关于计数的提示。我会试一试的。
猜你喜欢
  • 1970-01-01
  • 2020-06-27
  • 2023-03-31
  • 2023-03-06
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多