DÜZENLEME: Lütfen lütfen , lütfen cevap vermeden önce bu yazının altındaki listelenen iki gereksinimleri okumak. İnsanlar yeni mücevherlerini, kitaplıklarını falan yayınlamaya devam ediyor, bu da açıkça gereksinimleri karşılamıyor.
Bazen bazı komut satırı seçeneklerini çok ucuza basit bir betiğe dönüştürmek istiyorum. Getopts, ayrıştırma veya benzeri bir şeyle uğraşmadan bunu yapmanın eğlenceli bir yolu şudur:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Bu tam olarak normal Unix seçenekleri sözdizimi değil, çünkü " myprog -i foo bar -q" seçeneğindeki gibi seçenek olmayan komut satırı parametrelerini kabul edecek , ancak bununla yaşayabilirim. (Subversion geliştiricileri gibi bazı insanlar bunu tercih ediyor. Bazen ben de tercih ediyorum.)
Sadece mevcut olan veya olmayan bir seçenek yukarıdakilerden çok daha basit bir şekilde uygulanamaz. (Tek atama, tek işlev çağrısı, tek yan etki.) " -f Dosya adı " gibi bir parametre alan seçenekleri ele almanın eşit derecede basit bir yolu var mı ?
DÜZENLE:
Daha önce belirtmediğim bir nokta, çünkü Trollop'un yazarı kitaplığın "tek bir [800 satırlık] dosyaya" sığdığından söz edene kadar benim için netleşmemişti, sadece temiz sözdizimi, ancak aşağıdaki özelliklere sahip bir teknik için:
Kodun tamamı komut dosyasına dahil edilebilir (gerçek betiğin kendisini ezmeden, ki bu sadece birkaç düzine satır olabilir), böylece
binstandart Ruby 1.8 ile herhangi bir sistemdeki bir dizine tek bir dosya bırakılabilir. . [5-7] kurulum ve kullanma. Require ifadesi içermeyen ve birkaç seçeneği ayrıştıracak kodun bir düzine satırın altında olduğu bir Ruby betiği yazamazsanız, bu gereksinimi karşılayamazsınız.Kod, başka bir yerden kesip yapıştırmak yerine, hile yapacak kodu doğrudan yazmak için yeterince küçük ve basittir. İnternet erişimi olmayan, güvenlik duvarlı bir sunucunun konsolunda olduğunuz ve bir istemcinin kullanması için hızlı bir komut dosyasını bir araya getirmek istediğiniz durumu düşünün. Sizi bilmiyorum, ancak (yukarıdaki gerekliliği yerine getirmemenin yanı sıra) 45 satırlık basitleştirilmiş mikro-optiği ezberlemek bile yapmayı umursadığım bir şey değil.
getoptlongve optparseyakut sonra, bu makinede çalışıyorsa - Eğer senaryoyu dağıtırken onları kopyalamak için gerek kalmaz, standart yakut kütüphanesinde olan require 'optparse'veya require 'getoptlong'çok çalışacaktır.