Rullarning taqdimotchilaridan foydalanish - memoizable 3.1 da ishlatilmayapti - uning o'rniga || = dan foydalaning?

Muammo: imkon bo'lsa, bir nechta moslamani yoki bir nechta so'rovlarni yaratishga yo'l qo'ymaslik.

Men hozirgi kunlardagi eng yaxshi dastur sifatida rails bilan foydalanmoqdaman.

@the_record = record || = @record bilan elementlarni sozlash orqali "ActiveSupport.Memoizableni kengaytiring" (va keyin ularni eslatib qo'yish uchun usul (lar) ni qo'llash yaxshi bo'lar edi)/code> uslubi bir necha muammolar tufayli - soxta yoki nil saqlanmaydi, shuning uchun so'rov qayta chaqiriladi va u memoizable keshni yaxshiroq ishlatadi (ya'ni uni ishlatadi!).

Ammo shuni bilamanki, memoizablelar relslarga tushib qolmaydi 3.1 Carrierwave i github eslatmalarida va izohda: "DEPRECATION OGOHLANTIRISHI: ActiveSupport :: Memoizable eskirgan va kelajakda chop etiladigan versiyalarda olib tashlanadi, buning o'rniga ruby memoizatsiyasi naqshidan foydalaniladi (/Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/ saytida toshlar/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb: 284 ".

Ehtimol, bu hal qilinganmi? Kim biladi?

Ilgari foydalanishni davom ettirish bo'yicha eng yaxshi amaliyot haqidagi har qanday takliflar? || = Syntax-ni ishlating? Yuqoridagi masalalar haqida nima deyish mumkin?

enter image description here

6

1 javoblar

|| = usuli haqiqiy deb baholangan qiymatlarni qaytaradigan narsalar uchun juda yaxshi, lekin u ishlamaydigan narsalar uchun juda yaxshi ishlamaydi. memoize bu shartlarga rioya qilib, shunga mos ravishda qaytadan ishlaydi. Agar siz nil ni joylashtirmoqchi bo'lsangiz, bunday yondashuvni qabul qilishingiz mumkin:

def some_method
  return @some_method if (instance_variable_defined?(:"@some_method"))

  @some_method = begin
    ...
  end
end

Bu, o'zgaruvchining aniqlanganligini tekshiradi, agar siz o'rnatilsa, bu sizning ishingizda muhim farq hisoblanadi.

Ishonchim komilki, nega siz uni bekor qilyapsiz deb hisoblaysiz? [Mayklning eslatmasi, 3.2 da bekor qilingan, pastdagi yozuvga qarang]. Hujjatlar uning hozirgi vaqtda 3.1da ekanligini ko'rsatadi. Ba'zan ilovalar bir moduldan ikkinchisiga ko'chirilganda "eskirgan" deb belgilanadi, ammo ob'ekt mavjud bo'lib qoladi.

7
qo'shib qo'ydi
Xo'sh, men atrofga qaradim va ehtimol eski dasturni bekor qilgandim. Yaxshiyamki, men Memoizable bilan boraman, endi esa bu 3,1 Thx tadmadga ishonishim mumkinligini bilaman!
qo'shib qo'ydi muallif Michael Durrant, manba
Kutib turing, men ogohlantirishni topdim, bu suhbatdoshlar va memoizatsiyaga oid ajoyib railsbest kursida. Ular "Zombies uchun Rails" kursi sifatida tanilgan. Yaxshiyamki, ular memoizatsiya haqida ma'lumot berganlar, ActiveSupport-ning imkoniyatlari eng yaxshi ekanligi va ularning haqiqiy kodlari "ActiveSupport :: Memoizable (eslatma: ActiveSupport :: Memoizable Rails 3.1 da eskirgan)" deb aytdi! shuning uchun hali bu haqida ishonch emas va agar u eskirgan bo'lsa, yuqorida keltirilgan masalalar echilishi va hokazo.
qo'shib qo'ydi muallif Michael Durrant, manba
3.2 ga binoan ishlatib yuborilgan: guides.rubyonrails.org/…
qo'shib qo'ydi muallif m33lky, manba