kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 jwfearn
jwfearn
Question

Cara terbaik untuk melarikan diri dan melepaskan diri dari string di Ruby?

Apakah Ruby memiliki metode bawaan untuk melepaskan diri dari dan string yang tidak dapat dilepaskan? Di masa lalu, saya telah menggunakan ekspresi reguler; namun, saya berpikir bahwa Ruby mungkin melakukan konversi seperti itu secara internal sepanjang waktu. Mungkin fungsionalitas ini terekspos di suatu tempat.

Sejauh ini saya telah menemukan fungsi-fungsi ini. Mereka bekerja, tetapi mereka tampak sedikit rumit:

def escape(s)
  s.inspect[1..-2]
end

def unescape(s)
  eval %Q{"#{s}"}
end

Apakah ada cara yang lebih baik?

27 2011-12-26T22:42:46+00:00 3
 b4hand
b4hand
Pertanyaan edit 5 Juni 2015 в 1:39
Pemrograman
ruby
escaping
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Stanislav  O. Pogrebnyak
Stanislav O. Pogrebnyak
27 Desember 2011 в 12:03
2011-12-27T00:03:46+00:00
Lebih
Sumber
Sunting
#15054560

Ada banyak metode untuk melarikan diri, beberapa di antaranya:

# Regexp escapings
>> Regexp.escape('\*?{}.')   
=> \\\*\?\{\}\. 
>> URI.escape("test=100%")
=> "test=100%25"
>> CGI.escape("test=100%")
=> "test%3D100%25"

Jadi, ini benar-benar tergantung pada masalah yang harus Anda selesaikan. Tetapi saya akan menghindari penggunaan inspect untuk melarikan diri.

Update - ada sebuah dump, inspect menggunakannya, dan sepertinya itulah yang Anda butuhkan:

>> "\n\t".dump
=> "\"\\n\\t\""
Stanislav  O. Pogrebnyak
Stanislav O. Pogrebnyak
Jawaban edit 27 Desember 2011 в 3:41
16
0
 b4hand
b4hand
11 September 2013 в 10:16
2013-09-11T22:16:35+00:00
Lebih
Sumber
Sunting
#15054561

Pemutakhiran: Saya tidak lagi setuju dengan jawaban saya sendiri, tetapi saya lebih memilih untuk tidak menghapusnya karena saya menduga orang lain mungkin akan menempuh jalan yang salah, dan sudah ada banyak diskusi tentang jawaban ini dan alternatifnya, jadi saya pikir jawaban ini masih berkontribusi dalam percakapan, tetapi tolong jangan gunakan jawaban ini dalam kode yang sebenarnya.

Jika Anda tidak ingin menggunakan eval, tetapi ingin menggunakan modul YAML, Anda dapat menggunakannya sebagai gantinya:

require 'yaml'

def unescape(s)
  YAML.load(%Q(---\n"#{s}"\n))
end

Keuntungan menggunakan YAML dibanding eval adalah bahwa ia lebih aman. cane melarang semua penggunaan eval. Saya telah melihat rekomendasi untuk menggunakan $SAFE bersama dengan eval, tetapi itu tidak tersedia melalui JRuby saat ini.

Untuk apa yang layak, Python memang memiliki dukungan asli untuk unescaping backslashes.

 b4hand
b4hand
Jawaban edit 13 Desember 2018 в 11:27
13
0
the  Tin Man
the Tin Man
26 Desember 2011 в 11:43
2011-12-26T23:43:11+00:00
Lebih
Sumber
Sunting
#15054558

Ruby ' s inspect dapat membantu:

    "a\nb".inspect
=> "\"a\\nb\""

Biasanya jika kita mencetak sebuah string dengan sebuah embedded line-feed, kita akan mendapatkan:

puts "a\nb"
a
b

Jika kita mencetak versi yang diperiksa:

puts "a\nb".inspect
"a\nb"

Tetapkan versi yang diperiksa ke sebuah variabel dan Anda akan mendapatkan versi yang keluar dari string tersebut.

Untuk membatalkan pelarian, eval string tersebut:

puts eval("a\nb".inspect)
a
b

Saya tidak terlalu suka melakukannya dengan cara ini. Ini lebih merupakan rasa ingin tahu daripada sesuatu yang saya lakukan dalam praktik.

the  Tin Man
the Tin Man
Jawaban edit 30 Agustus 2013 в 10:16
11
0
Related communities 1
Ruby Indonesia
Ruby Indonesia
1 656 pengguna
Ruby adalah bahasa pemrograman dinamis berbasis skrip yang berorientasi objek. Tujuan dari ruby adalah menggabungkan kelebihan dari semua bahasa-bahasa pemrograman skrip yang ada di dunia.
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
工藤 芳則
Terdaftar 6 hari yang lalu
2
Ирина Беляева
Terdaftar 1 minggu yang lalu
3
Darya Arsenyeva
Terdaftar 1 minggu yang lalu
4
anyta nuam-nuam (LapuSiK)
Terdaftar 1 minggu yang lalu
5
Shuhratjon Imomkulov
Terdaftar 1 minggu yang lalu
ID
JA
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi