我有一些代码:
variable = ...
case variable
when ~:new
':new method!'
when ~:lenght
':size method!'
end
对于o = []
,它应该去大小写并返回':size method!'
对于o = String
应返回':new method'
这部分我知道如何实现(我的解决方案如下)
但它应该适用于任何类型的对象。而这部分我不知道如何实施。我不知道我的代码有什么问题,是不是正确的?我的代码:
module AbstractClass
def new; false end;
def size; false end;
end
class Class
include AbstractClass
end
class Array
include AbstractClass
def size; true end;
end
class String
include AbstractClass
def new; true end;
end
class Symbol
include AbstractClass
alias ~ to_proc
end
谢谢你的帮助!
答案 0 :(得分:1)
我知道你在这里做了什么:)我可以给你一个提示。
重要的是了解案例陈述在Ruby中的工作原理。如果您有以下代码:
case variable
when 1
# do stuff
when "foo"
# do other stuff
end
Ruby实际上是在这些值上调用===方法:
1 === variable
"foo" === variable
或者
1.===(variable)
"foo".===(variable)
订单在这里很重要。由于这些只是方法,您可以为任何对象覆盖它们,以提供与比较两个对象相关的一些自定义行为。
def MyClass
def ===(other)
# do my own comparison
end
end