这是一些简单的Ruby代码:
class Foo
def initialize(args)
@data = args[:data]
end
def perform
quit_if_no_data
print_message
end
def quit_if_no_data
return unless @data
end
def print_message
puts "You've got the data, congrats!"
end
end
Foo.new({}).perform # want nil to be returned
如果在没有数据的情况下实例化对象,如何从nil返回的方法链执行中退出?我希望Foo.new({}).perform
返回nil
。
答案 0 :(得分:2)
在这种情况下,如果没有提供必需的参数,你可能想在构造函数中引发异常。
如果参数实际上是可选的,您需要稍微重新考虑如何构建程序。你应该删除quit_if_
前缀,它永远不会起作用,而不是假设才能工作。你不能用这种方式发明新形式的程序流。你无法(或者应该)能够以这种方式跳出一种方法。如果您愿意,您需要更明确地使用raise
或throw
和rescue
/ catch
。
正确执行此操作的方法是让quit_if_no_data
方法实际调用should_quit?
并简单地返回true / false,指示是否应该退出,然后有条件地退出调用方法:< / p>
def perform
return if should_quit?
print_message
end
def should_quit?
@data == nil
end
因为Ruby是 Ruby ,你可以创建一些与你尝试用proc做的类似的东西,但它是一个非常过度的解决你的问题的方法,所以不要这样做:
def perform
with_data do
print_message
end
end
def with_data
yield if @data
end