উত্তর:
যদি i.between? (1, 10) জিনিস 1 elsif i.between? (11,20) জিনিস 2 ...
i.between?(1..10)
কাজ করবে না (যদি তা হয় তবে ..
) আমি মনে করি এর কোনও কারণ অবশ্যই আছে
3.between?(1, 3) => true
ব্যবহার করুন ===
অপারেটর (বা তার সমার্থক include?
)
if (1..10) === i
i
সংখ্যার (যেমন nil
)
if i === (1..10)
কাজ করবে না
(1..10000000000000000)
কোন অ্যারে নয় (1..10000000000000000) === 5000000000000000
হুডের নীচে কেবল "মধ্যবর্তী" পরীক্ষা করছে
@ বালডু যেমন বলেছিলেন, === অপারেটরটি ব্যবহার করুন বা কেস ব্যবহার করুন / যখন অভ্যন্তরীণভাবে ব্যবহার করে ===:
case i
when 1..10
# do thing 1
when 11..20
# do thing 2
when 21..30
# do thing 3
etc...
আপনি যদি এখনও রেঞ্জ ব্যবহার করতে চান ...
def foo(x)
if (1..10).include?(x)
puts "1 to 10"
elsif (11..20).include?(x)
puts "11 to 20"
end
end
আপনি সাধারণত এমন কিছু দিয়ে আরও অনেক ভাল পারফরম্যান্স পেতে পারেন:
if i >= 21
# do thing 3
elsif i >= 11
# do thing 2
elsif i >= 1
# do thing 1
আপনি ব্যবহার করতে পারেন
if (1..10).cover? i then thing_1
elsif (11..20).cover? i then thing_2
এবং এই মানদণ্ড অনুসারে ফাস্ট রুবি এর চেয়ে দ্রুতinclude?
প্রশ্নের সরাসরি উত্তর নয়, তবে আপনি যদি "অভ্যন্তরে" বিপরীত চান তবে:
(2..5).exclude?(7)
সত্য
exclude?
একটি রেল সংযোজন ।
আরও গতিশীল উত্তর, যা রুবিতে তৈরি করা যেতে পারে:
def select_f_from(collection, point)
collection.each do |cutoff, f|
if point <= cutoff
return f
end
end
return nil
end
def foo(x)
collection = [ [ 0, nil ],
[ 10, lambda { puts "doing thing 1"} ],
[ 20, lambda { puts "doing thing 2"} ],
[ 30, lambda { puts "doing thing 3"} ],
[ 40, nil ] ]
f = select_f_from(collection, x)
f.call if f
end
সুতরাং, সেক্ষেত্রে সীমাবদ্ধতা শর্তটি ধরতে "রেঞ্জগুলি" সত্যিই কেবল নীল দিয়ে বেঁধে রাখা হয়েছে।
স্ট্রিংগুলির জন্য:
(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")
# => সত্য
Date
এবংDateTime
যখন বস্তু===
না।