คำตอบ:
and
เป็นเช่นเดียว&&
แต่มีความสำคัญลดลง พวกเขาทั้งสองใช้การประเมินผลการลัดวงจร
คำเตือน: and
ยังมีความสำคัญต่ำกว่าดังนั้นคุณมักจะต้องการที่จะหลีกเลี่ยง=
and
ตัวอย่างเมื่อand
ควรใช้สามารถพบได้ในคู่มือ Rails ภายใต้ " หลีกเลี่ยงข้อผิดพลาด Double Render "
&&
ในขณะที่and
ควรใช้สำหรับกรณีเฉพาะเท่านั้น
and
เป็นตรงกันข้ามif
ปรับปรุงคำสั่ง: next if widget = widgets.pop
กลายเป็นwidget = widgets.pop and next
นั่นเป็นวิธีที่ดีของการวางมันทำจริงๆมัน. 'คลิก' ในหัวของฉัน (และ. or
เป็นเหมือนตรงกันข้ามunless
ปรับปรุง.)
ความแตกต่างที่ใช้งานได้จริงคือความแข็งแรงของการผูกซึ่งสามารถนำไปสู่พฤติกรรมที่แปลกประหลาดหากคุณไม่ได้เตรียม:
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
สิ่งเดียวกันที่ทำงานให้และ||
or
a = foo and bar
และ (a = foo ) && bar
พิสูจน์ให้เห็นว่ามีความสำคัญต่ำกว่าand
&&
a = foo and bar
(a = :foo) and nil
เทียบเท่ากับ ตั้งแต่การกำหนดผลตอบแทนมูลค่าที่แท้จริงเหตุผล ( :foo
) nil
แล้วประเมินส่วนที่สองซึ่งล้มเหลวกลับ
คู่มือสไตล์ทับทิมกล่าวว่าดีกว่าที่ฉันสามารถ:
ใช้ && / || สำหรับนิพจน์บูลีนและ / หรือสำหรับโฟลว์การควบคุม (กฎง่ายๆ: ถ้าคุณต้องใช้วงเล็บนอกคุณกำลังใช้ตัวดำเนินการที่ไม่ถูกต้อง)
# boolean expression
if some_condition && some_other_condition
do_something
end
# control flow
document.saved? or document.save!
and
/ or
สมบูรณ์และพวกเขาอาจมีจุด บ่อยครั้งที่การใช้งานในโฟลว์ควบคุมสามารถเขียนได้ชัดเจนยิ่งขึ้นด้วยif
/ unless
โอเปอเรเตอร์ (เช่นdocument.save! unless document.saved?
)
||
และ&&
เชื่อมโยงกับลำดับความสำคัญที่คุณคาดหวังจากโอเปอเรเตอร์บูลีนในภาษาการเขียนโปรแกรม ( &&
แข็งแรงมากมีความแข็งแกร่ง||
น้อยกว่าเล็กน้อย)
and
และor
มีความสำคัญต่ำกว่า
ยกตัวอย่างเช่นไม่เหมือน||
, or
มีความสำคัญต่ำกว่า=
:
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
เช่นเดียวกันไม่เหมือน&&
กันand
มีลำดับความสำคัญต่ำกว่า=
:
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
มีอะไรมากกว่าที่แตกต่าง&&
และ||
, and
และor
ผูกกับความสำคัญเท่ากัน
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
อ่อนที่มีผลผูกพันand
และor
อาจจะเป็นประโยชน์เพื่อการควบคุมการไหล: ดูhttp://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/
||
, or
มีความสำคัญต่ำกว่า=
" ... ตอนนี้มันทำให้รู้สึกมากขึ้นขอบคุณ!
and
&&
มีความสำคัญต่ำกว่า
แต่สำหรับผู้ใช้ที่ไม่มีข้อสันนิษฐานปัญหาอาจเกิดขึ้นหากมีการใช้งานพร้อมกับตัวดำเนินการอื่นที่มีลำดับความสำคัญอยู่ระหว่างตัวอย่างเช่นตัวดำเนินการที่ได้รับมอบหมาย:
def happy?() true; end
def know_it?() true; end
todo = happy? && know_it? ? "Clap your hands" : "Do Nothing"
todo
# => "Clap your hands"
todo = happy? and know_it? ? "Clap your hands" : "Do Nothing"
todo
# => true
and
มีลำดับความสำคัญต่ำกว่าส่วนใหญ่เราใช้เป็นตัวปรับเปลี่ยนการควบคุมการไหลเช่นif
:
next if widget = widgets.pop
กลายเป็น
widget = widgets.pop and next
สำหรับor
:
raise "Not ready!" unless ready_to_rock?
กลายเป็น
ready_to_rock? or raise "Not ready!"
ฉันชอบที่จะใช้if
แต่ไม่ได้and
เพราะif
เป็นที่เข้าใจมากขึ้นดังนั้นฉันก็ไม่สนใจและand
or
อ้างถึง " การใช้" และ "และ" หรือ "ในทับทิม " สำหรับข้อมูลเพิ่มเติม
ฉันไม่รู้ว่านี่เป็นความตั้งใจของ Ruby หรือหากนี่เป็นข้อผิดพลาด แต่ลองใช้โค้ดด้านล่างนี้ รหัสนี้ทำงานบน Ruby เวอร์ชั่น 2.5.1 และอยู่ในระบบ Linux
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
or
||
และ