我想知道如何构建一个用于替换交换机/案例的Ruby on Rails设计。
switch (needle) {
case 'hello' :
// some operation
return "something"
break;
case 'world' :
// some operation
return "something"
break;
default :
return "default";
break;
}
我正在考虑代表验证器的不同类。有这种模式吗?
class hello
def validate
// validate something
end
def execute
// do something
end
end
class world
def validate
// validate something
end
def execute
// do something
end
end
class implementation
def main
validate(hello, world)
end
end
答案 0 :(得分:0)
您可以在Rails中创建自己的自定义验证类。见http://juixe.com/techknow/index.php/2006/07/29/rails-model-validators/
然后你只需在你的模特中使用它们。
还有未充分利用的模式:
# string with square brackets and a regexp, returning the first match or nil
"fred"[/d/]
你可以通过将字符串拉出来并将它们用作消息来获得乐趣,但是要警告调试这种事情可能是一场噩梦。
您真的只是想向对象发送任意消息吗?在这种情况下,send()
可以解决问题。
答案 1 :(得分:0)
class MyClass
def my_method my_valitation_str
validator = Validator.from_str validation_str
validator.validate
end
class Validator
class Hello
def self.str
"hello"
end
def validate
... the hello validation code
end
end
class World
def self.str
"world"
end
def validate
... the hello validation code
end
end
def self.validator_types
[Hello, World]
end
def self.from_str val_str
validator_types.select{|t| t.str == val_str}.first
end
end
end
使用嵌套类是完全可选的。
但在大多数情况下,您不需要使用类.. Validator类可以是一个模块。和from_str可以直接返回模块。
实际上,如果“validate”意味着在MyClass实例上运行,那么你可以使用返回的模块扩展该类......