簡體   English   中英

Ruby除非&&聲明

[英]Ruby unless && statement

我在application_controller.rb中有以下內容

def layout
  unless request.subdomain.empty? && current_user.nil?
    self.class.layout 'admin'
  end
end

看來它上面的代碼不起作用。 但是,當我執行以下操作時,它確實有效。

def layout
  unless request.subdomain.empty?
    unless current_user.nil?
      self.class.layout 'admin'
    end
  end
end

我想通過刪除一個除非聲明來簡化代碼。 我怎么能這樣做?

unless something等同於if !something 在你的情況下,那將是

if !(request.subdomain.empty? && current_user.nil?)

隨你怎么便

if (!request.subdomain.empty? && !current_user.nil?)

使用布爾代數(De Morgan規則),您可以將其重寫為

if !(request.subdomain.empty? || current_user.nil?)

使用unless

unless request.subdomain.empty? || current_user.nil?

如果要將子域設置為'admin' 如果子域不為當前用戶不為 nil:

def layout
  if !request.subdomain.empty? && !current_user.nil?
    self.class.layout 'admin'
  end
end

更改邏輯以使用if語句和正謂詞,它將使代碼中的邏輯更容易理解:

def layout
  if request.subdomain.present? && current_user
    self.class.layout "admin"
  end
end

unless在最瑣碎的情況下, unless最佳做法是避免。

采用:

if (!request.subdomain.empty? && !current_user.nil?)

unless有更復雜的東西(包含或/和), unless我永遠不會使用它,因此很難推斷出這樣的陳述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM