我喜歡用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