উত্তর:
any?not empty?কিছু ক্ষেত্রে যেমন হয় না ।
>> [nil, 1].any?
=> true
>> [nil, nil].any?
=> false
ডকুমেন্টেশন থেকে:
যদি ব্লকটি দেওয়া না হয়, রুবি {| আপত্তি | এর অন্তর্ভুক্ত ব্লক যুক্ত করে আপত্তি} (এটি কোনও? সত্যের দিকে ফিরে আসবে যদি সংগ্রহের কমপক্ষে কোনও সদস্য মিথ্যা বা শূন্য না হয়)।
present?পদ্ধতিটি দেখতে চাইতে পারেন ।
#present?হ'ল কেবল-রেল। বিশুদ্ধ রুবি আপনি পাবেন NoMethodError: undefined method 'present?' for Array।
require 'activesupport'।
trueবা এটি খালি হলে তার মধ্যে পার্থক্য ।পদ্ধতিটি empty?অ্যারে শ্রেণি থেকে আসে
http://ruby-doc.org/core-2.0.0/Array.html#method-i-empty-3F
অ্যারেতে কিছু রয়েছে কিনা তা পরীক্ষা করতে এটি ব্যবহার করা হয়। এর মধ্যে এমন জিনিসগুলি অন্তর্ভুক্ত রয়েছে যা মূল্যায়ন করেfalse , যেমন nilএবং false।
>> a = []
=> []
>> a.empty?
=> true
>> a = [nil, false]
=> [nil, false]
>> a.empty?
=> false
>> a = [nil]
=> [nil]
>> a.empty?
=> false
পদ্ধতিটি any?এনিউমারেবল মডিউল থেকে আসে।
http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-any-3F
এটি অ্যারেতে "কোনও" মান মূল্যায়ন করে কিনা তা মূল্যায়ন করতে ব্যবহৃত হয় true। এই অনুরূপ পদ্ধতি none?, all?এবং one?যেখানে তারা মাত্র দেখতে কতবার সত্য মূল্যায়ন করা যেতে পারে চেক করুন। একটি অ্যারে পাওয়া মান গণনা সঙ্গে কোন সম্পর্ক নেই।
মামলা 1
>> a = []
=> []
>> a.any?
=> false
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> true
কেস 2
>> a = [nil, true]
=> [nil, true]
>> a.any?
=> true
>> a.one?
=> true
>> a.all?
=> false
>> a.none?
=> false
কেস 3
>> a = [true, true]
=> [true, true]
>> a.any?
=> true
>> a.one?
=> false
>> a.all?
=> true
>> a.none?
=> false
বিস্ময়বোধক চিহ্ন দিয়ে বিবৃতি উপসর্গ করা আপনাকে অ্যারেটি খালি নয় কিনা তা জানতে দেবে। সুতরাং আপনার ক্ষেত্রে -
a = [1,2,3]
!a.empty?
=> true
any?বড় অ্যারে জন্য এড়ানো ।
any? হয় O(n)empty? হয় O(1)any? দৈর্ঘ্য পরীক্ষা করে না তবে সত্যবাদী উপাদানগুলির জন্য পুরো অ্যারেটি স্ক্যান করে।
static VALUE
rb_ary_any_p(VALUE ary)
{
long i, len = RARRAY_LEN(ary);
const VALUE *ptr = RARRAY_CONST_PTR(ary);
if (!len) return Qfalse;
if (!rb_block_given_p()) {
for (i = 0; i < len; ++i) if (RTEST(ptr[i])) return Qtrue;
}
else {
for (i = 0; i < RARRAY_LEN(ary); ++i) {
if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qtrue;
}
}
return Qfalse;
}
empty? অন্যদিকে কেবল অ্যারের দৈর্ঘ্য পরীক্ষা করে।
static VALUE
rb_ary_empty_p(VALUE ary)
{
if (RARRAY_LEN(ary) == 0)
return Qtrue;
return Qfalse;
}
পার্থক্যটি প্রাসঙ্গিক যদি আপনার কাছে "স্পার্স" অ্যারে থাকে যা প্রচুর nilমান দিয়ে শুরু হয় যেমন উদাহরণস্বরূপ একটি অ্যারে যা সদ্য তৈরি হয়েছিল।
nilমানের সাথে শুরু হয় , "অ্যালার্ম" অ্যারে any?দিয়ে প্রথম উপাদানটিতে ব্লক রিটার্ন ব্যতীত, তাই জটিলতা এখনও empty?পদ্ধতির মতো হে (1)
আমি ব্যবহার করার পরামর্শ দিচ্ছি unlessএবংblank করার যাচাই করার জন্য খালি কিনা।
উদাহরণ:
unless a.blank?
a = "Is not empty"
end
এটি 'ক' খালি জানতে পারবে না। যদি 'ক' ফাঁকা থাকে তবে নীচের কোডটি চলবে না।
#blank?রেলের অংশ। যদি তারা ইতিমধ্যে রেলগুলি ব্যবহার করে তবে তা #present?হ'ল উপেক্ষা #blank?।
আমি এটি ব্যবহার করা মোটেই খারাপ মনে করি না any?। আমি এটি অনেক ব্যবহার করি। এটা পরিষ্কার এবং সংক্ষিপ্ত।
তবে যদি আপনি সমস্ত nilমানগুলি এড়িয়ে দেওয়ার বিষয়ে উদ্বিগ্ন হন তবে আপনি সত্যিই জিজ্ঞাসা করছেন অ্যারে রয়েছে কিনা size > 0। সেক্ষেত্রে, এই মৃত সহজ এক্সটেনশন (অনুকূলিত নয়, বানর-স্টাইল) আপনাকে নিকটবর্তী করবে।
Object.class_eval do
def size?
respond_to?(:size) && size > 0
end
end
> "foo".size?
=> true
> "".size?
=> false
> " ".size?
=> true
> [].size?
=> false
> [11,22].size?
=> true
> [nil].size?
=> true
এটি মোটামুটি বর্ণনামূলক, যৌক্তিকভাবে জিজ্ঞাসা করা হচ্ছে "এই বিষয়টির কোনও আকার আছে?" এবং এটি সংক্ষিপ্ত, এবং এটি অ্যাক্টিভসপোর্টের প্রয়োজন হয় না। এবং এটি নির্মাণ করা সহজ।
ভাবার জন্য অতিরিক্ত কিছু:
present?অ্যাক্টিভসপোর্টের মতো নয় ।String, যা শ্বেত স্পেস (যেমন present?করে) উপেক্ষা করে।length?জন্য Stringবা অন্যান্য ধরনের যেখানে এটি আরো বর্ণনামূলক হতে পারে।Integerএবং অন্যান্য Numericধরণের জন্য কাস্টম চাইবেন , যাতে একটি যৌক্তিক শূন্য ফিরে আসে false।
empty??