提问人:Dylan Knorr 提问时间:8/6/2021 最后编辑:Dylan Knorr 更新时间:8/6/2021 访问量:79
我的 Ruby 大小写语句语法有什么问题?[复制]
What is wrong with my Ruby case statement syntax? [duplicate]
问:
我正在尝试从数字字符串中筛选数字并计算每个不同数字的每次出现。 在我看来,我的语法看起来是正确的,但我经常在我的 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
答:
0赞
Tom Lord
8/6/2021
#1
ruby 中没有 ++
运算符。
你需要写。+= 1
虽然诚然,由于语法错误,这会导致一些神秘的错误消息,但我要注意的几件事是:
- 请仔细阅读错误消息。它告诉您错误的行号,在这种情况下,该行号可能应该指向第一次出现的 ?
++
- 使用更好的 IDE/编辑器设置!在恶劣的环境中编码就像戴着手铐写软件一样。你的编辑器应该在尝试运行代码之前警告你这里的语法无效。
评论
0赞
Dylan Knorr
8/6/2021
啊,哎呀。这就是我在语言之间切换所得到的......谢谢。我是相当新的,所以我没有花太多时间和精力来学习如何配置 VSC,因为我对自己的偏好和需求没有清晰的认识。
0赞
Tom Lord
8/6/2021
case 语句中也缺少一个 -- 它再次告诉我:使用更好的 IDE 设置来警告你语法错误。看起来您正在尝试用 Ruby :) 编写 Pythonend
0赞
Tom Lord
8/6/2021
另外,为什么你所谓的变量实际上是一个?字符串必须用引号括起来,切换语言不是这个错误的借口......prime_string
Integer
0赞
Tom Lord
8/6/2021
此外,在红宝石中还有一种更简单的方法可以做到这一点;核心语言有一个非常方便的方法:.您可以执行类似 或 .Enumerable#tally
prime_string.chars.tally
prime_number.digits.tally
0赞
Dylan Knorr
8/6/2021
尽管 Python3 是我的第一门语言,但缺少的结尾和缺少的引号实际上是由于试图简化我的 SO 代码。也感谢您的提示。我试一试。
评论
end
++
zeroes +=1
prime_string.chars #=> ["2", "3", "5",..., "9", "1"]
prime_string.chars.tally #=> {"2"=>4, "3"=>14, "5"=>3, "7"=>12, "1"=>22, "9"=>8, "4"=>3, "6"=>2, "8"=>2, "0"=>4}
count_array
prime_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"]
chars
each_char
prime_string.chars
prime_string.each_char.select { |c| ["0", "1", "2"].include?(c) }.tally.values_at("0", "1", "2") #=> [4, 22, 4]
"0"
"1"
"2"
values_at
h.values
h