Inilah yang saya miliki sekarang - yang terlihat terlalu bertele-tele untuk pekerjaan yang dilakukannya.
@title = tokens[Title].strip! || tokens[Title] if !tokens[Title].nil?
Asumsikan token adalah array yang diperoleh dengan memisahkan garis CSV. sekarang fungsinya seperti strip! chomp! et. semua mengembalikan nihil jika string tidak dimodifikasi
"abc".strip! # => nil
" abc ".strip! # => "abc"
Apa cara Ruby mengatakan trim jika itu berisi spasi tambahan tambahan atau spasi tambahan tanpa membuat salinan?
Akan lebih buruk jika saya ingin melakukannya tokens[Title].chomp!.strip!
Jawaban:
Saya kira yang Anda inginkan adalah:
The
#strip!
Metode akan kembalinil
jika tidak mengupas apa-apa, dan variabel itu sendiri jika ditelanjangi.Menurut standar Ruby, metode yang diberi akhiran dengan tanda seru mengubah variabel yang ada.
Semoga ini membantu.
Pembaruan: Ini adalah output dari
irb
untuk menunjukkan:sumber
@title.tap &:strip!
? Tampaknya lebih bersih dari yang lainnya.nil
kecuali jika melucuti sesuatu? Itu tidak diragukan lagi membingungkan banyak orang (karena itu tidak masuk akal).Btw, sekarang ruby sudah mendukung hanya strip tanpa "!".
Membandingkan:
Juga tidak mungkin
strip
tanpa duplikat. Lihat sumber di string.c:ruby 1.9.3p0 (2011-10-30) [i386-mingw32]
Pembaruan 1: Seperti yang saya lihat sekarang - itu dibuat pada tahun 1999 tahun (lihat rev # 372 di SVN):
Update2:
strip!
tidak akan membuat duplikat - keduanya dalam versi 1.9.x, 2.x dan trunk.sumber
strip!
.strip
. Apakah saya salah mengerti sesuatu? Bagaimana lagi saya bisa mengartikan "mustahil untuk stripping tanpa duplikat"?strip!
aliasrb_str_strip_bang
.Tidak perlu kedua strip dan chomp sebagai strip juga akan menghapus pengembalian carriage trailing - kecuali Anda telah mengubah pemisah rekaman default dan itulah yang Anda chomping.
Jawaban Olly sudah memiliki cara kanonik untuk melakukan ini di Ruby, meskipun jika Anda sering melakukan ini, Anda selalu dapat menentukan metode untuk itu:
Memberi:
Juga perlu diingat bahwa pernyataan if akan mencegah
@title
penugasan jika token nihil, yang akan membuatnya mempertahankan nilai sebelumnya. Jika Anda ingin atau tidak keberatan@title
selalu ditugaskan, Anda dapat memindahkan cek ke dalam metode dan selanjutnya mengurangi duplikasi:Sebagai alternatif, jika Anda ingin berpetualang, Anda dapat menentukan metode pada String itu sendiri:
Memberi salah satu dari:
sumber
Jika Anda menggunakan Ruby on Rails ada squish
Jika Anda hanya menggunakan Ruby, Anda ingin menggunakan strip
Di sinilah letak gotcha .. dalam kasus Anda, Anda ingin menggunakan strip tanpa bang!
saat telanjang! tentu saja mengembalikan nihil jika tidak ada tindakan itu masih memperbarui variabel jadi strip! tidak dapat digunakan inline. Jika Anda ingin menggunakan strip inline, Anda dapat menggunakan versi tanpa bang!
mengupas! menggunakan pendekatan multi-line
strip pendekatan jalur tunggal ... JAWABAN ANDA
sumber
Saya pikir contoh Anda adalah pendekatan yang masuk akal, meskipun Anda dapat menyederhanakannya sedikit sebagai:
Alternatif Anda bisa meletakkannya di dua baris:
sumber
Jika Anda ingin menggunakan metode lain setelah Anda membutuhkan sesuatu seperti ini:
Dengan cara ini Anda dapat membuka dan masih melakukan sesuatu setelah :)
sumber
Jalanku:
sumber
Jika Anda memiliki ruby 1.9 atau support, Anda dapat melakukannya dengan mudah
Ini sangat keren, karena memanfaatkan
:try
dan:tap
metode, yang merupakan konstruksi fungsional paling kuat di ruby, menurut pendapat saya.Bentuk yang lebih imut, yang berfungsi sebagai simbol sekaligus:
sumber
Sangat mungkin saya tidak mengerti topik, tetapi tidakkah ini akan melakukan apa yang Anda butuhkan?
sumber