我在ruby应用程序中搜索一种简洁的方法来定义Exception依赖项。 以下是我想要处理的内容(以下示例不起作用):
def error_class(superclass, http_code_value)
Class.new(superclass) do
def http_code
http_code_value
end
end
end
class AppError < StandardError
def to_s
"Here is my code: #{http_code}"
end
# other methods ...
end
# Clean error tree build
ClientError = error_class AppError, 400
ServerError = error_class AppError, 500
TeapotError = error_class ClientError, 418
# and so on ...
puts "client #{ClientError.new}" # client Here is my code: 400
puts "server #{ServerError.new}" # server Here is my code: 500
puts "teapot #{TeapotError.new}" # teapot Here is my code: 418
这里的问题是在类上下文中评估参数_http_code
:它不存在。
有没有办法可以在不依赖eval的情况下实现它?
答案 0 :(得分:4)
为获得正确的背景,这是一次非常小的改造:
def error_class(_superclass, _http_code)
Class.new(_superclass) do
define_method(:http_code) do
_http_code
end
end
end
使用define_method
时,默认情况下会在正确的上下文中创建它们。作为注释,这些变量并没有什么特别之处,因此应该抛弃_
前缀。正如工程师指出的那样,_
通常表示&#34;未使用&#34;,&#34;不重要&#34;或者&#34;不可避免的临时副本,我为此大声道歉&#34;。