gpt4 book ai didi

Ruby:动态创建具有值(value)的类

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:39 25 4
gpt4 key购买 nike

我正在寻找一种干净的方法来定义 ruby​​ 应用程序中的异常依赖项。这是我想解决的问题(以下示例不起作用):

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 来实现它?

最佳答案

为了获得正确的上下文,这是一个非常小的修改:

def error_class(_superclass, _http_code)
Class.new(_superclass) do
define_method(:http_code) do
_http_code
end
end
end

当使用 define_method 时,它默认在正确的上下文中创建它们。请注意,这些变量确实没有什么特别之处,因此应该放弃 _ 前缀。正如 engineersmnky 指出的那样,_ 通常表示“未使用”、“不重要”或“不可避免的临时副本,对此我深表歉意”。

关于Ruby:动态创建具有值(value)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47084405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com