gpt4 book ai didi

Ruby 连接最佳实践

转载 作者:数据小太阳 更新时间:2023-10-29 07:41:06 25 4
gpt4 key购买 nike

我需要用 Ruby 解决一个简单的问题,但想以一种巧妙的方式来解决。我有一个功能:

def fullname
first + " " + mi + last
end

如果一个或多个变量是nil,那将崩溃,假设这个例子是mi,因为它在中间。

错误:

can't convert nil into String

如果我将函数更改为:

def fullname
first + " " + mi.to_s + last
end

def fullname
first + " " + (mi || "") + last
end

它会修复它。现在我想在 mi(中间首字母)之后添加一个额外的空格(如果它存在)并且我因为一些愚蠢的原因而感到难过。做这样的事情最干净的方法是什么,因为我将不得不做很多事情,有时会添加一个逗号。

这种需求的例子:

def fullname
first + " " + (mi || "") + last + suffix
# want a ", " afer the last name if there is a suffix
end

最佳答案

首先:实际上,我会说处理这个问题的最“Ruby”方式——避免 nil 问题,也就是说——是使用 string插值:

"#{first} #{mi} #{last}"

如果上述任何变量为 nil,这会很好地工作,因为它只会导致字符串中出现空格。

至于条件空间问题:有很多方法可以给猫剥皮。我很喜欢sawa's idea .这是另一个我见过的变体,虽然它不是特别有效(但 10 次中有 9 次无关紧要):

[first, mi, last].compact.join(" ")

最后:对于“加逗号 + 后缀(如果存在)”的要求,这已经足够复杂了,我建议您编写一些方法来分离该逻辑:

def suffix_if_necessary(name)
suffix ? "#{name}, #{suffix}" : name
end

def fullname
suffix_if_necessary([first, *mi, last].join(" "))
end

不过,这里有多种方法可以完成这项工作。任何适合您的东西。

关于Ruby 连接最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17814724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com