A (biraz) daha az kafa karıştırıcı yoludur:
str.split(/',\s*'/).map do |match|
if match[0] == ?,
match
else
"some string"
end
end.join
Ben satırlı üçlü ifadeleri korkunç olduğunu düşünüyorum, if
blok Ruby dönebilirsiniz özellikle.
Muhtemelen en kafa karıştırıcı şey, bir karakter literal olan ?,
'dur. Ruby 1.8'de bu, karakterin ASCII değeri anlamına gelir (bu durumda 44
), Ruby 1.9'da bu sadece bir dizedir (bu durumda ","
).
Sadece ","
yerine bir karakter değişmezi kullanmanın nedeni, Ruby 1.9'da değiştirilen bir dizede []
aramasının geri dönüş değeridir. In 1.8 it returned the ASCII value of the character at that position, in 1.9 it returns a single-character string. ?,
'u kullanarak, Ruby 1.8 & 1.9 arasındaki String#[]
arasındaki farklar hakkında endişelenmenize gerek kalmaz. match
ilk karakter, ,
ise
Sonuçta şartlı sadece kontrol edilir ve değerini aynı tutar eğer öyleyse, aksi halde "some string"
için onu ayarlar.
Teşekkürler @AndrewMarshall, 'match == (?,) Olsaydı yardımcı olurdu? eşleşme: "bazı dize" '? Yoksa bu başka bir şey anlamına mı geliyor? – ismail
@IsmailTabtabai Bu aynı olurdu. Üçlü ifadeler yaptığımda, genellikle tüm koşullu ifadeyi nerede olduğu açıkça belirtmek için parantez içinde sardım, ama bu sadece bir stil. Karakter edebileri muhtemelen Ruby'nin daha az bilinen sözdizimsel yapılarından biridir ve ne olduğunu bilmediğinizde (özellikle diğer '' 'lerle eşleştirildiğinde) kafa karıştırıcı olabilir. –
Aynı şey anlamına geliyor. Yani [0] ==?,? eşleşme: "bazı dize" – Bijan