如何写单行块
How to write single line blocks
我发现自己尝试使用单行块,但最终不得不分成多行。我最近的例子是我试图从活动记录对象的 name
字段中获取缩写。
@employee.name = "John Doe"
我想 return "JD"
.
我知道的唯一方法是初始化一个字符串,然后拆分名称,然后添加到初始化的字符串中。至少我怎样才能避免必须初始化空字符串?
def initials # In model
intials = ''
name_array = self.name.split(" ")
name_array.each { |name| initials += name[0].capitalize }
return initials
end
让我来玩玩一些概念验证
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
我会尝试这样的事情:
'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"
然后就变成了需要去掉不需要的部分的情况。
我发现自己尝试使用单行块,但最终不得不分成多行。我最近的例子是我试图从活动记录对象的 name
字段中获取缩写。
@employee.name = "John Doe"
我想 return "JD"
.
我知道的唯一方法是初始化一个字符串,然后拆分名称,然后添加到初始化的字符串中。至少我怎样才能避免必须初始化空字符串?
def initials # In model
intials = ''
name_array = self.name.split(" ")
name_array.each { |name| initials += name[0].capitalize }
return initials
end
让我来玩玩一些概念验证
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
我会尝试这样的事情:
'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"
然后就变成了需要去掉不需要的部分的情况。