রুবির " সত্যতা " এবং " মিথ্যাচার " সম্পর্কে সর্বজনীন ধারণা রয়েছে ।
রুবি করে বুলিয়ান অবজেক্টের জন্য দুই নির্দিষ্ট ক্লাস আছে, TrueClass
এবং FalseClass
, বিশেষ ভেরিয়েবল দ্বারা প্রকাশ Singleton দৃষ্টান্ত দিয়ে true
এবং false
যথাক্রমে।
তবে সত্যতা এবং মিথ্যাচার এই দুটি শ্রেণীর উদাহরণের মধ্যেই সীমাবদ্ধ নয়, ধারণাটি সর্বজনীন এবং রুবির প্রতিটি বস্তুর ক্ষেত্রে প্রযোজ্য। প্রতিটি বস্তু হয় সত্যবাদী বা মিথ্যা । নিয়ম খুব সহজ। বিশেষত, মাত্র দুটি বস্তু মিথ্যা :
nil
, এর একক উদাহরণNilClass
এবংfalse
এর একক উদাহরণFalseClass
প্রতি একক অন্যান্য বস্তু হল truthy । এটি এমনকি অন্যান্য প্রোগ্রামিং ভাষায় যেমন মিথ্যা বলে বিবেচিত হয় এমন বস্তুগুলিও অন্তর্ভুক্ত করে
এই বিধিগুলি ভাষায় নির্মিত এবং ব্যবহারকারী-সংজ্ঞাযোগ্য নয়। কোনও to_bool
অন্তর্নিহিত রূপান্তর বা অনুরূপ কিছু নেই।
এখানে আইএসও রুবি ভাষার নির্দিষ্টকরণের একটি উদ্ধৃতি দেওয়া হয়েছে :
.6..6 বুলিয়ান মান
একটি বস্তু হয় একটি মধ্যে শ্রেণীবদ্ধ করা হয় trueish বস্তুর বা falseish বস্তুর ।
কেবল মিথ্যা এবং শূন্য মিথ্যা বস্তু। মিথ্যা হল শ্রেণীর একমাত্র উদাহরণ
FalseClass
(15.2.6 দেখুন), যেখানে মিথ্যা-এক্সপ্রেশন মূল্যায়ন করে (11.5.4.8.3 দেখুন)। শূন্য ক্লাসের শুধুমাত্র উদাহরণস্বরূপ হয়NilClass
(15.2.4 দেখুন), যা করার জন্য একটি শূন্য প্রকাশ মূল্যায়ণ (11.5.4.8.2 দেখুন)।মিথ্যা এবং শূন্য ব্যতীত অন্য বিষয়গুলি সত্যবাদী বস্তুগুলিতে শ্রেণিবদ্ধ করা হয়। সত্য হ'ল শ্রেণীর একমাত্র উদাহরণ
TrueClass
(15.2.5 দেখুন), যেখানে সত্য-অভিব্যক্তি মূল্যায়ন করে (11.5.4.8.3 দেখুন)।
এক্সিকিউটেবল রুবি / স্পেক সম্মত বলে মনে হচ্ছে :
it "considers a non-nil and non-boolean object in expression result as true" do if mock('x') 123 else 456 end.should == 123 end
ঐ দুই সূত্র মতে, আমি অনুমান যে Regexp
গুলি রয়েছে truthy , কিন্তু আমার পরীক্ষা অনুযায়ী, তারা নয়:
if // then 'Regexps are truthy' else 'Regexps are falsy' end
#=> 'Regexps are falsy'
আমি এটি YARV 2.7.0-পূর্বরূপ 1 , ট্রফলার রুবি 19.2.0.1 এবং জেআরবি 9.2.8.0 এ পরীক্ষা করেছি । তিনটি বাস্তবায়ন একে অপরের সাথে একমত এবং আইএসও রুবি ল্যাঙ্গুয়েজ স্পেসিফিকেশন এবং রুবি / স্পেক সম্পর্কে আমার ব্যাখ্যাটির সাথে একমত নয়।
আরো সঠিকভাবে, Regexp
যে বস্তু মূল্যায়নের ফল Regexp
লিটারেল হয় falsy , যেহেতু Regexp
যে বস্তু অন্য কিছু অভিব্যক্তি ফল হয় truthy :
r = //
if r then 'Regexps are truthy' else 'Regexps are falsy' end
#=> 'Regexps are truthy'
এটি কি কোনও বাগ, বা পছন্দসই আচরণ?
!!//
মিথ্যা তবে !!/r/
সত্য। অদ্ভুত প্রকৃতপক্ষে.
!!/r/
করে উত্পাদন false
করে।
//
এ if // then
একটি পরীক্ষা (জন্য শর্টকাট হিসাবে ব্যাখ্যা করা হয় if //=~nil then
একটি RegExp উদাহরণস্বরূপ হিসেবে এবং না (যে সবসময় falsy যাই হোক না কেন প্যাটার্ন))।
Regex.new("a")
সত্য।