Ruby 使用自定义消息创建自定义运行时错误的最短方法?
是否有一个较短的方法来实现以下目标Ruby 使用自定义消息创建自定义运行时错误的最短方法?,ruby,Ruby,是否有一个较短的方法来实现以下目标 class InvalidEmail < RuntimeError def initialize(email) @email = email; end def to_s; "'#{@email}' is an invalid email"; end end 这可能会节省一些换行。不过,我会保持线路中断 InvalidEmail = Class.new(RuntimeError) { attr_accessor :
class InvalidEmail < RuntimeError
def initialize(email) @email = email; end
def to_s; "'#{@email}' is an invalid email"; end
end
这可能会节省一些换行。不过,我会保持线路中断
InvalidEmail = Class.new(RuntimeError) { attr_accessor :email; def to_s; "'#{@email}' is an invalid email"; end }
这可能会节省一些换行。不过,我会保持线路中断
InvalidEmail = Class.new(RuntimeError) { attr_accessor :email; def to_s; "'#{@email}' is an invalid email"; end }
raise
无异常类本身就是一个运行时错误
。所以你可以只做raise“#{email}是一封无效的电子邮件”
。不过我想要自定义错误类。所以问题是重写我的示例,同时保留自定义类和自定义消息,但使用更少的样板文件,为什么您希望它比那个更短?这只会损害可读性。@user81269,问问自己:指定我的自定义错误需要什么信息?1.错误的类名(InvalidEmail
)。2.字符串消息3。引用传入的参数的内容。这些信息可以轻松地放在一行上。其他一切都是陈词滥调和分心。如果您认为样板文件有助于可读性,那么您需要重新调整对可读性的整体理解。在创建异常类时,还应该关注层次结构。也许您想明确地从InvalidEmail
中解救,但也许您想从ValidationError
中解救,并且您想确保在一个位置捕获InvalidEmail、InvalidFirstName、InvalidAnything。因此,类层次结构对于异常也很重要。您选择忽略的内容实际上是为了帮助您。raise
without-exception类本身就是一个RuntimeError
。所以你可以只做raise“#{email}是一封无效的电子邮件”
。不过我想要自定义错误类。所以问题是重写我的示例,同时保留自定义类和自定义消息,但使用更少的样板文件,为什么您希望它比那个更短?这只会损害可读性。@user81269,问问自己:指定我的自定义错误需要什么信息?1.错误的类名(InvalidEmail
)。2.字符串消息3。引用传入的参数的内容。这些信息可以轻松地放在一行上。其他一切都是陈词滥调和分心。如果您认为样板文件有助于可读性,那么您需要重新调整对可读性的整体理解。在创建异常类时,还应该关注层次结构。也许您想明确地从InvalidEmail
中解救,但也许您想从ValidationError
中解救,并且您想确保在一个位置捕获InvalidEmail、InvalidFirstName、InvalidAnything。因此,类层次结构对于异常也很重要。你选择忽略的,实际上是在帮助你。这总是会导致,''是无效的电子邮件
,无论你以电子邮件的形式传递什么。啊,忘了提到用法有点不同。你需要在构造函数之外设置exception.email=@email
。我对此不感兴趣。构造它应该是一个简单的步骤,并且对象应该是不可变的。然后用def initialize(email);…;替换attr_访问器
;结束代码>。与初始实现基本相同。to_s
和@email=email
可以泛化并提取到基类,在这种情况下,该类将成为InvalidEmail=class.new(SimpleError){def initialize(object,message);super;end}
。不过只要上一节课就不用麻烦了。因此,即使是初始化
也不需要在那里。这总是会导致''是无效的电子邮件
,无论您以电子邮件的形式传递什么。啊,忘了提到用法有点不同。你需要在构造函数之外设置exception.email=@email
。我对此不感兴趣。构造它应该是一个简单的步骤,并且对象应该是不可变的。然后用def initialize(email);…;替换attr_访问器
;结束代码>。与初始实现基本相同。to_s
和@email=email
可以泛化并提取到基类,在这种情况下,该类将成为InvalidEmail=class.new(SimpleError){def initialize(object,message);super;end}
。不过只要上一节课就不用麻烦了。就这点而言,即使是initialize
也不需要在那里。