def identify_class(obj)
result = case obj
when obj.kind_of? Hacker then "It's a Hacker!"
when obj.kind_of? Submission then "It's a Submission!"
when obj.kind_of? TestCase then "It's a TestCase!"
when obj.kind_of? Contest then "It's a Contest!"
end
puts result
end
语法错误,意外tCONSTANT,期待keyword_then或','或&#39 ;;'要么 ' \ n'
在result = case obj语句和一堆
之后语法错误,意外的keyword_when,期待keyword_end
在每个when语句之后,最后输出错误的结尾除外。
如果删除除了一个之外的每个when语句,它甚至都不会工作,尽管第二个错误消失了。
我尝试使用if else梯形图,但它也不起作用
如果obj.kind_of可以使用一个单独的吗?黑客提出了#34;它是......"
答案 0 :(得分:2)
在Ruby中有两种类型的case表达式,你似乎对它们感到困惑。第一个与if...elsif...end
表达式基本相同,如下所示:
case
when boolean_expression
# code executed if boolean_expression is truthy
when other_expression
# code executed if other_expression is truthy
# other whens ...
end
请注意第一个case
之前when
之后没有任何内容。在这种类型的case
语句中,将执行与计算结果为true的第一个表达式相关联的代码,而不执行其余的代码。
另一种case
语句接受一个参数并将该参数与每个when
子句进行比较:
case obj
when type1
# some code if type1 === obj
when other_type
# some code if other_type === obj
# other whens ...
end
此处有一个case
(本例中为obj
)的参数。这将使用===
依次与每个when
子句的参数进行比较,并且为该比较为真的第一个运行相关代码。
请注意,此类case
可以像第一种类型一样编写:
case
when type1 === obj
# etc...
在您的情况下,您从case obj
开始,表示第二种类型。然后,在每个obj
子句中使用when
,就像在第一种中一样。
(你得到的实际错误实际上只是由Ruby语法中的一些含糊不清引起的语法错误,但即使你修复了你的代码不能按照你的预期工作。)
模块overrides ===
to check if the arg is an instance,所以为了您的使用,您可以这样做:
result = case obj
when Hacker then "It's a Hacker!"
when Submission then "It's a Submission!"
when TestCase then "It's a TestCase!"
when Contest then "It's a Contest!"
end