使用 Ruby 的三元运算符? : 缩短这个
Using Ruby's ternary operator ? : to shorten this
我想知道是否有办法收紧它:
def find_by_recordtype
e = EvLk.find_by_sql(<SQL QUERY>)
return (e.size > 0 ? e : nil)
end
我可以做类似下面的事情,但不想查询两次。
return ( EvLk.find_by_sql().size > 0 ? EvLk.find_by_sql() : nil)
您可以做的一件事是记住结果。
这是否有意义取决于对象和应用程序的上下文。
def find_by_recordtype
return @records if @records
@records = EvLk.find_by_sql(<SQL QUERY>)
end
+1 代表 ruby 努比。
顺便说一句,你为什么要returnnil
?通常情况下最好是同一种类型。
EvLk.find_by_sql(<SQL QUERY>).tap{|e| break if e.empty?}
您正在使用 find_by_sql
,因此您可能在 Rails 中或有可用的 ActiveSupport。在这种情况下,您可以使用 presence
:
presence()
Returns the receiver if it's present otherwise returns nil
. object.presence
is equivalent to
object.present? ? object : nil
所以你可以这样做:
def find_by_recordtype
EvLk.find_by_sql(<SQL QUERY>).presence
end
我想知道是否有办法收紧它:
def find_by_recordtype
e = EvLk.find_by_sql(<SQL QUERY>)
return (e.size > 0 ? e : nil)
end
我可以做类似下面的事情,但不想查询两次。
return ( EvLk.find_by_sql().size > 0 ? EvLk.find_by_sql() : nil)
您可以做的一件事是记住结果。
这是否有意义取决于对象和应用程序的上下文。
def find_by_recordtype
return @records if @records
@records = EvLk.find_by_sql(<SQL QUERY>)
end
+1 代表 ruby 努比。
顺便说一句,你为什么要returnnil
?通常情况下最好是同一种类型。
EvLk.find_by_sql(<SQL QUERY>).tap{|e| break if e.empty?}
您正在使用 find_by_sql
,因此您可能在 Rails 中或有可用的 ActiveSupport。在这种情况下,您可以使用 presence
:
presence()
Returns the receiver if it's present otherwise returns
nil
.object.presence
is equivalent toobject.present? ? object : nil
所以你可以这样做:
def find_by_recordtype
EvLk.find_by_sql(<SQL QUERY>).presence
end