我喜欢用Ruby编写这么多的原因之一是因为它非常有能力通过一个衬垫实现很多。优雅的红宝石一个衬垫
我喜欢:
@sentence = @sentence.split(' ').map!{|x| x = x[0..0].upcase << x[1..-1] }.join(' ')
它利用每个字,这还不是最惊人的,但相当有效率的第一个字母。
什么是你已经看到或用Ruby写的最优雅的一个班轮?
我喜欢用Ruby编写这么多的原因之一是因为它非常有能力通过一个衬垫实现很多。优雅的红宝石一个衬垫
我喜欢:
@sentence = @sentence.split(' ').map!{|x| x = x[0..0].upcase << x[1..-1] }.join(' ')
它利用每个字,这还不是最惊人的,但相当有效率的第一个字母。
什么是你已经看到或用Ruby写的最优雅的一个班轮?
您发布的oneliner:
@sentence = @sentence.split(' ').map!{|x| x = x[0..0].upcase << x[1..-1] }.join(' ')
但你误会关于Ruby有两件事情。
首先,在地图调用中说x=
不影响地图调用之外的任何内容。该数组元素的新值是该块返回的值。
其次,您不需要使用<<
对第一个字符串进行变异 - 创建新字符串的连接(使用+
)是一个更好的选择。
第三,map!
直接对由split
返回的数组进行更改。你想要做的是保持该数组不变(即使它不改变程序语义),并使用map
返回带有映射结果的新数组。
所以,你应该写:
@sentence = @sentence.split(' ').map{|x| x[0..0].upcase + x[1..-1] }.join(' ')
现在的说法x[0..0].upcase + x[1..-1]
还是很钝。也许你应该用capitalize
方法替换它,它已经将字符串的第一个字母改为大写。 (请注意,它也downcases所有其他的可能是也可能不是你想要的。)
@sentence = @sentence.split(' ').map{|x| x.capitalize }.join(' ')
我可能会使用gsub!
改变就地部分字符串,但是这可能有点钝角:
@sentence.gsub!(/\S+/){|x| x.capitalize}
还有一件事。如果一个块的唯一目的是调用传递给块对象上的一个方法,你可以做到以下几点:
@sentence = @sentence.split(' ').map(&:capitalize).join(' ')
或修改我的gsub!
版本:
@sentence.gsub!(/\S+/,&:capitalize)
你可能想看看Ruby Quiz #113。
嗯,我前几天写了一篇,但是不能用它作为答案,因为当时问题已经关闭了。 如果字符串不在那里,它用一个字符串替换文件的第一行。
我希望有人提高了这其中也:
ruby -i.bak -pe "print ($_!~/string/ && $.<2) ? \"string\n\":''" filename.txt
斐波那契序列发生器:
def fib n;n==0?[0]:n==1?[0,1]:(2..n-1).inject([0,1]){|a|a<<(a[-1]+a[-2])};end
一样:
def fib n;n<2?(0..n-1).to_a():(2..n-1).inject([0,1]){|a|a<<(a[-1]+a[-2])};end
打开一个文件,写微博,和关闭它在一条线上:
File.open(File.join(Rails.root, 'lib', 'assets', 'file.txt'), 'a+') {|f| f.write("stuff"+"\n" }
大多数我最好的Ruby的单行每天脚本利用and
,unless
,if
,&&
等等,如:
puts "x is nil!" if x.nil?
您可以使用unless
和if
互换,但unless
显著提高可读性当正确使用时:
puts "bad input type!" unless ["bs", "cf", "is"].include?(type)
通常情况下,最好的红宝石单线最终在两到三行
def try_first(actual_index)
x = [get_header(actual_index, 0), get_data(actual_index, 0)] unless get_header(actual_index, 0).blank?
x = try_second(actual_index) if x[0].blank? #blank is a rails method, detects nil and empty strings and empty containers ([]) I think too
puts "x is nil!" if x.nil?
x
end
我说的俏皮话由几个单行因为该方法:单行与变量Ruby的“价”制度(nil
和false
是唯一的“底片”)共同作用下,往往结合本身并不比我的代码中的其他位置单行一行。我的很多方法虽然只是一条线:
def get_all_coords(type)
eval("@#{type}_coords")
end
这就是你真正开始变得优雅。将代码分解成单独的方法。单线法是完美的。
绝对是GREP(Windows用户)的这种模拟。 [credit goes to Dave Thomas]
ruby -pe 'next unless $_ =~ /regexp/' < file.txt
肯定的斐波纳契数!
def fib(n, t = n < 2 ? n : fib(n-1) + fib(n-2)) t; end
请编辑和纪念这个作为一个社区的wiki,以避免它关闭是主观的(没有真正的答案):) – Matchu 2010-11-28 17:07:06
是很久以前删除标记问题社区维基的能力。看到这个:http://meta.stackexchange.com/questions/392/should-the-community-wiki-police-be-shut-down – 2010-11-28 17:10:37