ruby - Ruby 程序中的案例代码无法使用传递的值
问题描述
为程序编写了一些测试代码,试图传递 2 个值,一个文件和一个数字。下面的内容根本不起作用,但如果我有类似的东西puts "test"
(在外壳之外)它可以工作。
def read_album(music_file, number)
puts number #(this does something)
case number.to_i
when(number > 1)
puts "done"
when(number < 2)
puts "something"
when(number == 3)
puts "none of this inside case is working"
end
end
def main()
a_file = File.new("albums.txt", "r")
print("Choose album id: ")
choice_of_album = gets().to_i
read_album(a_file, choice_of_album)
end
main()
解决方案
你case
的 s 没有按照你的想法做。对给定的表达式when
进行评估,并将结果与case
使用大小写相等运算符的值进行比较===
。诸如number > 1
将评估为true
or的表达式false
。将此结果与 Ruby 中的整数进行比较是没有意义的。
您应该直接与常量进行比较。
case number
when 1
# handle 1
when 2
# handle 2
when 3
# handle 3
else
# handle unknown case; error?
end
请注意,其他类可能会覆盖===
以提供有用的行为。例如,Range
andRegexp
类就是这样做的。
case number
when 1..3
# handle 1, 2 and 3
end
case string
when /pattern/
# handle pattern
end
值得注意的是,Proc
班级也这样做!
def greater_than(n)
proc { |x| x > n }
end
case number
when greater_than(2)
# handle number > 2
end
推荐阅读
- r - 修改对象以在 R 中与 summary_table() 一起使用:“错误:`x` 必须是公式”
- python - 基于另一个线程激活一个线程
- r - 将整个文本放入绘图区域
- c++ - 为什么我的第二个 sendinput 实际上没有发送输入?
- javascript - Jquery İnput Keyup 泰语、英语和空间字符
- mysql - Elasticsearch 会更好地与像 MongoDB 这样的文档数据库或像 MySQL 这样的关系数据库一起工作吗?
- python - 如何使用 autouse 全局定义补丁?
- javascript - 在firebase中选择内部循环?
- android-studio - 如何向数字类型的 EditText 添加分数?
- python - Django 索引未考虑现有表