如何编写单行块

时间:2016-12-12 21:45:17

标签: ruby ruby-on-rails-4 block

我发现自己试图使用单行块,但最终还是要分成多行。我最近的例子是我试图从活动记录对象的name字段中获取首字母。

@employee.name = "John Doe"

我希望返回"JD"

我知道如何做的唯一方法是初始化一个字符串,然后拆分名称,然后添加到初始化的字符串。至少我怎么能避免必须初始化空字符串?

def initials # In model
    intials = ''
    name_array = self.name.split(" ")
    name_array.each  { |name| initials += name[0].capitalize }
    return initials
end

2 个答案:

答案 0 :(得分:3)

让我玩一些概念验证

class Employee 
  attr_accessor :name

  def initials
    @name.split(' ').map { |name| name[0] }.join
  end
end

e = Employee.new
e.name = "Foo Baz"
p e.initials # FB

答案 1 :(得分:2)

我尝试过这样的事情:

'John Doe'.scan(/\b[A-Z]/).join # => "JD"
'John Doe'.scan(/\b[a-z]/i).join # => "JD"

这些表达式中的任何一种都可以用具有足够复杂性的名称来分解:

'John Doe-Smith'.scan(/\b[a-z]/i).join # => "JDS"
'John Doe Jr. III'.scan(/\b[a-z]/i).join # => "JDJI"
'Dr. John Doe MD'.scan(/\b[a-z]/i).join # => "DJDM"

然后,需要去掉你不想要的部分。