2016-01-25 91 views
1

我想要一個算法來正確設置首選名稱。這將是用戶的偏好。用戶可以在社交名稱和民事姓名之間進行選擇。其中只有一個是強制性的,但如果它是nil,我想選擇另一個。有沒有一種優雅的方式在Ruby中做到這一點?

if name_preference == SOCIAL_NAME_PREFERENCE && !social_name.nil? || name_preference == CIVIL_NAME_PREFERENCE && civil_name.nil? 
    social_name 
elsif name_preference == CIVIL_NAME_PREFERENCE && !civil_name.nil? || name_preference == SOCIAL_NAME_PREFERENCE && social_name.nil? 
    civil_name 
end 

回答

5

另一種強調用戶選擇的方式。

if name_preference == CIVIL_NAME_PREFERENCE 
    civil_name || social_name 
elsif name_preference == SOCIAL_NAME_PREFERENCE 
    social_name || civil_name 
end 

的示例使用nil計算結果爲false紅寶石屬性。因此nil?檢查可以由||取代。

+0

這不等同於OP的代碼。 – sawa

+0

顯式'返回'與OP的問題有關嗎? – sawa

+0

@sawa在哪種情況下是錯的? 'return'部分涉及優雅的國際海事組織。 – sschmeck

2

更容易理解的代碼:

if name_preference == CIVIL_NAME_PREFERENCE 
    return civil_name.nil? ? social_name : civil_name 
elsif name_preference == SOCIAL_NAME_PREFERENCE 
    return social_name.nil? ? civil_name : social_name 
end 

我加了return語句爲清楚起見,雖然他們不需要。

+0

這真的很有幫助!謝謝! :D – madam

+1

更好'civil_name || social_name'和'social_name || civil_name'。 – Hauleth

1
case name_preference 
when SOCIAL_NAME_PREFERENCE 
social_name.nil? ? civil_name : social_name 
when CIVIL_NAME_PREFERENCE 
civil_name.nil? ? social_name : civil_name 
end 
相關問題