আমি রুবির অভিজ্ঞ নই, তাই আমার কোডটি "কুশ্রী" বোধ করে এবং মূio় নয়:
def logged_in?
!user.nil?
end
আমি বরং কিছু চাই
def logged_in?
user.not_nil?
end
কিন্তু এমন কোনও পদ্ধতি খুঁজে পায় না যা বিরোধিতা করে nil?
উত্তর:
আপনি যখন অ্যাক্টিভসপোর্টটি ব্যবহার করছেন, কেবলমাত্র নন- শূন্যতার জন্য যাচাই করার জন্য user.present?
http://api.rubyonrails.org/classes/Object.html#method-i-premitted%3F রয়েছে , কেন ব্যবহার করবেন না
def logged_in?
user # or !!user if you really want boolean's
end
false.present? == false
!false.nil? == true
আপনি বুলিয়ানগুলির সাথে অত্যধিক উদ্বিগ্ন বলে মনে হচ্ছে।
def logged_in?
user
end
যদি ব্যবহারকারী শূন্য থাকে তবে লগইন_ইন? একটি "ভুয়া" মান প্রদান করবে। অন্যথায়, এটি কোনও বস্তু ফেরত দেবে। রুবিতে আমাদের সত্য বা মিথ্যা ফেরার দরকার নেই, যেহেতু জাভাস্ক্রিপ্টের মতো আমাদের "সত্যবাদী" এবং "মিথ্যা" মান রয়েছে।
হালনাগাদ
আপনি যদি রেলগুলি ব্যবহার করেন তবে আপনি present?
পদ্ধতিটি ব্যবহার করে এটি আরও সুন্দরভাবে পড়তে পারেন :
def logged_in?
user.present?
end
?
এটি একটি বুলিয়ান দেয়। !!value
যে কোনও কিছুকে বুলিয়ান রূপান্তর করার সর্বোত্তম উপায়। হুবহু এক নয়, তবে এই ক্ষেত্রে Object#present?
আরআর-তেও ভাল।
present?
আপনার প্রশ্নের উত্তর হিসাবে উপস্থাপন করা অন্যান্য উত্তরগুলি থেকে সাবধান থাকুন ।
present?
blank?
রেল এর বিপরীত হয় ।
present?
অর্থবহ মান আছে কিনা তা পরীক্ষা করে দেখুন। এই জিনিসগুলি একটি present?
চেক ব্যর্থ করতে পারে :
"".present? # false
" ".present? # false
[].present? # false
false.present? # false
YourActiveRecordModel.where("false = true").present? # false
যেখানে একটি !nil?
চেক দেয়:
!"".nil? # true
!" ".nil? # true
![].nil? # true
!false.nil? # true
!YourActiveRecordModel.where("false = true").nil? # true
nil?
কোনও বস্তু আসলে আছে কিনা তা পরীক্ষা করে nil
। আর কিছু: একটি খালি স্ট্রিং, 0
, false
যাই হোক না কেন, নয় nil
।
present?
খুব দরকারী, তবে অবশ্যই এর বিপরীত নয় nil?
। দুটি বিভ্রান্তি অপ্রত্যাশিত ত্রুটি হতে পারে।
আপনার ব্যবহারের ক্ষেত্রে present?
কাজ করবে তবে পার্থক্য সম্পর্কে সচেতন হওয়া বরাবরই বুদ্ধিমানের কাজ।
false.blank?
হিসাবে হিসাবে একই নয়false.nil?
present?
আপনার ডাটাবেসটি জিজ্ঞাসা nil?
করবে,
হতে পারে এটি একটি পদ্ধতির হতে পারে:
class Object
def not_nil?
!nil?
end
end
!self.nil?
তখনকার মতো হওয়া উচিত নয় !nil?
বা self
অন্তর্নিহিত?
আমি !
পদ্ধতিটি থেকে ফলাফলটিতে রুবি-এস্ক পদ্ধতিটি উপস্থাপন করতে পারি nil?
।
def logged_in?
user.nil?.!
end
এত বড় যে রুবিমাইন আইডিই এটিকে ত্রুটি হিসাবে চিহ্নিত করবে। ;-)
আপনি কেবল নিম্নলিখিতটি ব্যবহার করতে পারেন:
if object
p "object exists"
else
p "object does not exist"
end
এটি কেবল শূন্যের জন্যই নয়, মিথ্যা ইত্যাদির জন্যও কাজ করে না তাই আপনার ব্যবহারের ক্ষেত্রে এটি কার্যকর হয় কিনা তা পরীক্ষা করে দেখা উচিত।
আমি এই প্রশ্নে একটি অবজেক্ট পদ্ধতি অনুসন্ধান করে Symbol#to_proc
পৌঁছেছি , যাতে আমি কোনও ব্লকের পরিবর্তে শর্টহ্যান্ড ব্যবহার করতে পারি ; এর arr.find(&:not_nil?)
চেয়ে কিছুটা বেশি পঠনযোগ্য আমি খুঁজে পাই arr.find { |e| !e.nil? }
।
আমি যে পদ্ধতিটি পেয়েছি তা হ'ল Object#itself
। আমার ব্যবহারে, আমি কীটির জন্য একটি হ্যাশের মানটি খুঁজতে চেয়েছিলাম name
, যেখানে কিছু ক্ষেত্রে সেই কীটি দুর্ঘটনাক্রমে মূলধন হিসাবে চিহ্নিত হয়েছিল Name
। সেই ওয়ান-লাইনারটি নিম্নরূপ:
# Extract values for several possible keys
# and find the first non-nil one
["Name", "name"].map { |k| my_hash[k] }.find(&:itself)
অন্যান্য উত্তরে উল্লিখিত হিসাবে , আপনি যে ক্ষেত্রে বুলিয়ান পরীক্ষা করছেন সেখানে এটি দর্শনীয়ভাবে ব্যর্থ হবে।
my_hash.values_at("Name", "name").find
?
map
যা আমি এই উদাহরণে সরলতার জন্য মুছে ফেলেছিলাম, তাই এখানে লিখিতভাবে এটির সাথে বিনিময়যোগ্য values_at
। গুরুত্বপূর্ণ অংশটি যা পাস হয় find
।
present?
একটি ফাঁকা স্ট্রিং দরকার।! "".nil?
সত্য ফিরে, কিন্তু"".present?
মিথ্যা প্রত্যাবর্তন।