عملگر =|| در روبی

دوستان این عملگر به طور مثال در کد زیر به کار برده شده ولی راستش دقیق متوجه کاراییش نشدم

current_user ||= User.find(session[:user_id]) if session[:user_id]@

ممنون میشم توضیح بدین

من خیلی کم با روبی کار کردم ولی فکر کنم اگه current_user برابر با nil یا false باشه، عمل assign رو انجام میده. اگر از قبل چیزی توش باشه، اون خط رو اصلا اجرا نمیکنه.

سمت چپی مورد بازجویی قرار میگیره و اگر نتیجه نده مقدار سمت راستی بهش داده میشه.

در مثال شما current_user به این روش memoize شده، یعنی فقط در صورتی کوئری اجرا میشه که current_user نتیجه نده.

میشد به صورت زیر هم عمل کرد اما روش شما خیلی ساده تر و بهتره.

a = a.present? ? a : ....
2 پسندیده

بله درسته ولی کاراییش رو تو این قطعه کد متوجه نشدم

نتیجه نده یعنی عملا مقداری از قبل نداشته باشه درسته؟

یعنی false یا nil باشه

صفر در روبی معنی false رو نمیده؟

خوشبختانه نه، اما خیلی راحت میتونی امتحان کنی

puts 0 || 1

2 پسندیده

درسته کاملا حرفتون ممنونم

a = a || b

مفهموم کد بالا این میشه درسته؟

1 پسندیده

giphy

2 پسندیده