නිල් එදිරිව හිස් එදිරිව රූබි හි හිස්ව තේරුම් ගන්නේ කෙසේද?


1141

මම නැවත නැවතත් වෙනස්කම් පිළිබඳ පැහැදිලි නිර්වචනයක් සොයමින් සොයා nil?, blank?සහ empty?රේල් පීලි මත රූබි දී. මෙන්න මම ආපු සමීපතමයා:

  • blank?වස්තූන් ව්‍යාජ, හිස් හෝ සුදු පැහැති නූලකි. උදාහරණයක් ලෙස, "", " ", nil, [], හා {}හිස් වේ.

  • nil? වස්තූන් නිල් ක්ලාස් හි උදාහරණ වේ.

  • empty?වස්තූන් පන්ති විශේෂිත වන අතර අර්ථ දැක්වීම පන්තියෙන් පන්තියට වෙනස් වේ. අක්ෂර නොමැති නම් නූලක් හිස් වන අතර එහි කිසිදු අයිතමයක් නොමැති නම් අරාව හිස් වේ.

කිසිවක් නැතිවී තිබේද, නැතහොත් කළ හැකි දැඩි සංසන්දනයක් තිබේද?


26
එක් ගොචා යනු හිස් අරාවකි present?. එයට හේතුව blank?හිස් අරාවක් සඳහා නැවත පැමිණීම සත්‍ය වේ.
ක්‍රිස්

4
එක් ලස්සන දෙයක් බව දැකීම ය :nil?මත අර්ථ ::Kernelහා ඉක්මවනු ::NilClassඇති අතර :empty?බොහෝ පන්ති (natively මත, ෙවන් ෙවන් වශෙයන් ක්රියාත්මක ::String, ::Array, ::Hash, සහ-natively නොවන වැනි අනෙකුත් පන්ති මත ::Setstdlib හා ::ActiveRecord::Relationරේල් පීලි සිට). එබැවින් :nil?සියලුම පන්තිවල සහ තනිවම ::Objectඇතුළත් වන සෑම පන්තියකම ලබා ගත හැකිය ::Kernel, එහිදී :empty?ඔබේ පන්තිවල ක්‍රියාත්මක කළ යුතු හෝ විශේෂයෙන් ඇතුළත් කළ යුතුය.
නැවත ලිවීම

ඔබ සම්පූර්ණ nilසංකල්පය තේරුම් ගැනීමට උත්සාහ කරන්නේ නම් මෙහි ආරම්භ කරන්න .
totymedli

[1] pry(main)> [].blank? => true
මයිකල්

Answers:


1445

.nil? ඕනෑම වස්තුවක් මත භාවිතා කළ හැකි අතර වස්තුව නිල් නොවේ නම් එය සත්‍ය වේ.

.empty? නූල්, අරා සහ හැෂ් මත භාවිතා කළ හැකි අතර සත්‍ය නම්:

  • නූල් දිග == 0
  • අරාව දිග == 0
  • හැෂ් දිග == 0

නැති .empty?දෙයක් මත ධාවනය කිරීමෙන් a විසි වේ NoMethodError.

බව යනු .blank?තුළ ය. එය ඇත රේල් පීලි විසින් ක්රියාත්මක වගේ වැඩ මෙන්ම ඕනෑම වස්තුවක් මත ක්රියාත්මක වනු ඇත .empty?නූල්, අරා සහ කාරීව මත.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? හිස් නොවන නමුත් හිස් අවකාශයක් පමණක් අඩංගු නූල් මත සත්‍යය තක්සේරු කරයි:

"  ".blank? == true
"  ".empty? == false

රේල් පීලි ද සපයයි .present? නිශේධනය නැවත වන .blank?.

අරාව ගොචා: අරාවෙහි සියලුම අංග හිස්ව තිබුණද blank?නැවත පැමිණේ . මෙම අවස්ථාවේ දී හිස් බව තීරණය කිරීම සඳහා, උදාහරණයක් ලෙස භාවිතා කරන්න :falseall?blank?

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

27
ප්රශ්නයේ සඳහන් කර ඇති පරිදි, සමහර හිස් නොවන නූල් හිස් ලෙස ගණන් ගනී.
ග්‍රිම්

1
ඇයි ඔවුන් නිල්ගේ .empty නැවත ලියන්නේ නැත්තේ? ඔවුන්ට .blank එකතු කළ හැකි නම්?
tillda

6
එසේම:false.blank? == true
ෂැනන්

2
මම සඳහන් කරන්නම් presence!
මාක්-ඇන්ඩ්‍රේ ලැෆෝචූන්

2
ටොම් සිය පිළිතුරෙහි සඳහන් කර ඇති හිස්-අරා ගොචා වලට අමතරව, මෙය ආරක්ෂක ගැටළු වලට තුඩු දිය හැකි බව මතක තබා ගන්න. හෝ params.blank ?, සහ දැනට රේල්ස් හි බොහෝ සාකච්ඡා හා වැඩ සඳහා හේතුවයි. වැඩි විස්තර සඳහා මෙතැනින් බලන්න: github.com/rails/rails/issues/13420
හූවන්

678

සියලු අවස්ථා සමඟ මම මෙම ප්‍රයෝජනවත් වගුව සාදන ලදී:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

blank?, present?සපයනු ලබන්නේ රේල්ස් විසිනි.


57
එය හිස් බව සැලකිල්ලට ගත යුතුද? සහ ඉදිරිපත් කරන්නේද? රේල් පීලි පමණි. ඔවුන් ආපසු හැරවීම: රූබි 2.0.0 හි NoMethodError.
ලොනි එවරස්

17
any?ඔබ කවදා හෝ වගුව යාවත්කාලීන කරන්නේ නම් එකතු කිරීම සලකා බලන්න .
ඩෙනිස්

blank?හා present?"නොවේ රේල් පීලි පමණක් ", ඔවුන් ස්වයංක්රීයවම රේල් පීලි විසින් ඇතුළත් වී සිටින නමුත් පහසුවෙන් ActiveSupport ගේ ප්රධාන දිගු භාවිතා-රේල් පීලි නොවන කේතය ඇතුළත් කළ හැක. Stackoverflow.com/questions/4238867/…
ටින් මෑන්

218

ජූලියන්ගේ මේසය දිගු කරන්න:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

Ref: හිස්? හිස්? නිල්? 傻傻


1
Ibe සිබෙවින් වැන්ග්, මම මෙම වගුව බාගත කර මගේ පිළිතුරු කිහිපයක එය භාවිතා කර ඔබට බැර එකතු කරමි. ඔබට කමක් නැතැයි සිතමි :) මෙම විශාල උත්සාහයට සුභ පැතුම්!
ලහිරු

1
Enumerable#any?වැනිලා රූබි, එය "රේල් පීලි පමණක්" යටතේ ලැයිස්තුගත නොකළ යුතුය
ඩැනියෙරෝ

1
andaniero ඔබගේ මතක් කිරීමට ස්තූතියි, වගුව යාවත්කාලීන කර ඇත.
සිබෙවින් වැන්ග්

සංඛ්යාත්මක වර්ග ද ඇති .zero?හා.nonzero?
DaveMongoose

64

ඉක්මන් ඉඟිය: !obj.blank? == obj.present?

සමහර ප්‍රකාශනවල ඇස් වලට පහසු / පහසු විය හැකිය


! obj.nil ට සමාන දෙයක් තිබේද?
කිර්ක්

present?active_spport හි කොටසකි, එය ලබා ගැනීමට ඇතුළත් කළ යුතු දේ පිළිබඳව මෙහි පරීක්ෂා කරන්න: stackoverflow.com/a/4648704/1569
Factor Mystic

2
Irkirk: !! obj එක සමානයි! Obj.nil?
මොහොමඩ් හෆීස්

4
OMohamedHafez නැත එය එසේ නොවේ. !!false
අජේඩි 32

අහ්, @ අජෙඩි 32 හොඳ ඇල්ලීම! එක ව්‍යතිරේකයකට සමානයි.
මොහොමඩ් හෆීස්

53

එක් වෙනස නම් .nil?සහ .empty?බැවින්ද, වැඩසටහන්කරණ භාෂාවට රූබි විසින් සපයන බව ක්රම .blank?දෙයක් ඇත එකතු වෙබ් සංවර්ධන රාමුව රේල් පීලි විසින්.


51

රූප විස්තරය මෙහි ඇතුළත් කරන්න

  • ඇති සෑම දේ nil?ඇතblank?
  • ඇති සෑම දේ empty?ඇතblank?
  • බව කිසිවක් empty?කියන්නේnil?
  • බව කිසිවක් nil?කියන්නේempty?

TL; dr - පමණක් යොදා blank?සහ present?ඔබ අතර වෙනස හඳුනා ගැනීමට අවශ්ය නම් ""හා" "


2
වෝ! ඔබට මගේ +1
Am33d

17

විශේෂ අවස්ථාවක් වන්නේ බූලියන් අගයක් නැතිනම් තක්සේරු කිරීමට උත්සාහ කරන විට:

false.present? == false
false.blank? == true
false.nil? == false

මෙම අවස්ථාවේ දී නිර්දේශය භාවිතා කිරීම වනු ඇත .nil?


15

any?නිර්දේශය ගැන කුඩා සටහනක් : එය සාමාන්‍යයෙන් සමාන බව ඔහු නිවැරදිය !empty?. කෙසේ වෙතත්, යන්තම් සුදු අවකාශයේ (අලා ) නූලකට any?නැවත පැමිණේ .true" "

ඇත්ත වශයෙන්ම, ඉහත 1.9 අදහස් ද බලන්න.


රේල් පීලි වල, හිස් අවකාශයේ අක්ෂර අඩංගු ඕනෑම නූලක් "හිස්": "\ n \ r \ t". හිස්ද? # => ඇත්ත
ලොනි එක් එක්

14

any?පොදුවේ ඇති දේ අමතක නොකරන්න !empty?. රේල් පීලි මම සාමාන්යයෙන් සමඟ ප්රකාශයකට අවසානයේ යමක් ඉදිරියේ සඳහා පරීක්ෂා if somethingහෝ unless somethingපසුව භාවිතා blank?එය සෑම තැනකම වැඩ පෙනේ සිට අවශ්ය ස්ථාන.


4
.ඕනෑම? රූබී 1.9 හි ඇති නූල් සමඟ ක්‍රියා නොකරයි. ගණන් කළ යුතු අතර, අංක #9 තනිවම රූබී 1.9 හි ක්‍රියා නොකරයි.
ග්‍රිම්

4
any?හිස්බව පරීක්ෂා කිරීම ගැන සැලකිලිමත් වන්න . ඔබට ව්‍යාජ සාරධර්ම රාශියක් තිබේ නම් එය සාවද්‍ය වේ. එය මඟ හැරිය හැකි ක්‍රමයක් නම් සෑම විටම සත්‍ය වාරණයක් පසුකර යාමයි : [nil, false].any?{ true }, නමුත් !empty?කෙටි වන අතර ඔබට අමුතු හැසිරීම මතක නැත.
කෙල්වින්

13

nil?සම්මත රූබි ක්‍රමයක් වන අතර එය සියලු වස්තූන් වෙත කැඳවිය හැකි trueඅතර වස්තුව නම් ආපසු එවිය හැකිය nil:

b = nil
b.nil? # => true

empty?සම්මත රූබි ක්‍රමයක් වන අතර එය නූල්, අරා සහ හැෂ් වැනි සමහර වස්තූන් මත කැඳවිය හැකි අතර trueමෙම වස්තූන්ගේ මූලද්‍රව්‍යයක් නොමැති නම් ආපසු එයි :

a = []
a.empty? # => true

b = ["2","4"]
b.empty? # => false

empty?nilවස්තු මත කැඳවිය නොහැක .

blank?රේල්ස් ක්‍රමයක් වන අතර එය nilවස්තූන් හා හිස් වස්තූන් ලෙස හැඳින්විය හැකිය.


8

වෙනස කුමක්දැයි අනෙක් සියල්ලන්ම හොඳින් පැහැදිලි කර ඇත.

මම රූබි ඔන් රේල්ස් තුළට එක් කිරීමට කැමතියි, එය භාවිතා කිරීම වඩා හොඳ obj.blank?හෝ obj.present?ඒ වෙනුවට obj.nil?හෝ obj.empty?.

obj.blank?හැන්ඩ්ල් සියළු වර්ග nil, '', [], {}, හා ප්රතිලාභ trueවටිනාකම් ලබා ගත නොහැකි වන අතර ප්රතිලාභ නම් falseවටිනාකම් වස්තුවක ඕනෑම වර්ගයක ලබා ගත හැකි නම්.


6

exists?දත්ත සමුදාය තුළ දත්ත තිබේද නැද්ද යන්න පරීක්ෂා කිරීමට ක්‍රමය භාවිතා කළ හැකිය. එය එක්කෝ වීජ වටිනාකම් නැවත trueහෝ false.


ආකෘති පන්තියේ පමණක් ක්‍රියාත්මක වේ!
රොජර්

5

රේල් පීලි 4

@ කෝබන්-බ ok ක්ගේ 'අරේ ගොචා: හිස්?' අරා වල හිස් අගයන් පමණක් තිබේද යන්න පරීක්ෂා කිරීම සඳහා එය හිස් ලෙස සැලකිය හැකිද? සැබෑ:

[ nil, '' ].all? &:blank? == true

කෙනෙකුට ද කළ හැකිය:

[nil, '', "", " ",' '].reject(&:blank?).blank? == true

4

nil?ඕනෑම වස්තුවක භාවිතා කළ හැකිය. 'හිස්' අගයන් ඇතුළුව වස්තුවට කිසියම් වටිනාකමක් තිබේද නැද්ද යන්න එය තීරණය කරයි.

උදාහරණයක් වශයෙන්:

example = nil
example.nil?  # true

"".nil?  # false

මූලික වශයෙන් nil?කවදා හෝ සත්‍ය බවට පත්වන්නේ වස්තුව ඇත්ත වශයෙන්ම 'නිල්' ට සමාන නම් පමණි.

empty?එකතුවක් ලෙස සැලකෙන වස්තූන් මත පමණක් කැඳවනු ලැබේ. නූල් (අක්ෂර එකතුවක්), හැෂ් (යතුරු / වටිනාකම් යුගල එකතුවක්) සහ අරා (අත්තනෝමතික වස්තු එකතුවක්) වැනි දෑ මෙයට ඇතුළත් වේ. empty?එකතුව සත්‍යය නම් එකතුවෙහි කිසිදු අයිතමයක් නොමැත.

උදාහරණයක් වශයෙන්:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

සිටින බව දැනුම් empty?nil වස්තූන් ලෙස nil වස්තූන් ඉල්ලා කළ නොහැකි එකතුවක් ද නො වන අතර එය හැර මතු කරනු ඇත.

එකතුවක ඇති අයිතම හිස් වුවත්, එයින් අදහස් වන්නේ එකතුවක් හිස් බව නොවේ.

blank?මූලික වශයෙන් සංයෝජනයක් වන nil?අතර empty?එය එකතු කිරීම් යැයි ඔබ සිතන වස්තූන් පරීක්ෂා කිරීම සඳහා ප්‍රයෝජනවත් වේ.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.