2016-01-25 89 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 
相关问题