带问号的ruby方法?模式匹配?



以问号结尾的Ruby方法;传统返回真或假。

的例子:

if success?
puts "yes"
else 
puts "oh nos"
end

是否存在一种可接受的模式匹配样式来询问问题并返回[:ok]或[:error,…]?

例如:

case authorization_valid?
in [:error, msg]
puts "error: #{msg}"
in [:ok]
puts "yes"
end

我们使用:ok,:error来代替true或false。

带问号的ruby方法?模式匹配?

想法吗?

丹尼尔

没有这样的标准。您可能对使用dry-monads中的Result感兴趣:

def method_that_return_a_result
if condition
Success :foo
else
Failure :bar
end
end

case method_that_return_a_result
in Success(value)
puts value
in Failure('some specific value')
puts 'this happened, sorry'
in Failure(String => error)
raise ProcessingError, error
in Failure(other)
puts "Unexpected failure #{other.inspect}"
end

(代码只是你可以实现的一个例子)

您的案例将显示

case authorization_valid?
in Failure(msg)
puts "error: #{msg}"
in Success
puts "yes"
end

相关内容

最新更新