当然,Ruby中不存在枚举,但基于this post,我使用了以下内容:
class PostType
Page = 1,
Post = 2
end
我想将值传递给方法并将其用于比较。所以:
initialize(post_type)
if post_type = PostType::Page
# do something here
elsif post_type = PostType::Post
# do something else here
end
end
但这不起作用,无论我传递给我的类的构造函数,它总是产生相同的结果。
为什么将“假枚举”传递给方法并试图比较它的任何想法都行不通?我必须比较价值吗?即post_type = 2
?
答案 0 :(得分:4)
指定而不是比较
initialize(post_type)
if post_type == PostType::Page
# do something here
elsif post_type == PostType::Post
# do something else here
end
end
答案 1 :(得分:4)
除了你应该使用Symbol
的事实,还有一个语法错误,我假设你想要不同的语义:
if post_type = PostType::Page
应该是
if post_type == PostType::Page
所以你的代码应该是
if post_type == :page
...
答案 2 :(得分:4)
您要分配而不是比较。使用==
代替=
可以产生更好的结果。
initialize(post_type)
if post_type == PostType::Page
# do something here
elsif post_type == PostType::Post
# do something else here
end
end
答案 3 :(得分:3)
您可以使用case
:
case post_type
when PostType::Page then # Do something
when PostType::Post then # Do something else
else raise 'Invalid post type'
end
此外,你真的应该使用Symbol
来做到这一点:
case post_type
when :page then # Do something
when :post then # Do something else
else raise 'Invalid post type'
end
答案 4 :(得分:1)
这就是为什么这样做的好习惯:
def initialize(post_type)
if PostType::Page == post_type
# do something here
elsif PostType::Post == post_type
# do something else here
end
end
如果你犯了这样的错误,编译器会发出警告"already initialized constant ..."