บางครั้งฉันเห็นวิธีการใน Ruby ที่มี "?" และ "!" ในตอนท้ายของพวกเขาเช่น:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
ฉันสงสัยว่าจุดประสงค์ของพวกเขาคืออะไร? พวกเขาเป็นเพียงการเคลือบน้ำตาลแบบวากยสัมพันธ์หรือไม่?
บางครั้งฉันเห็นวิธีการใน Ruby ที่มี "?" และ "!" ในตอนท้ายของพวกเขาเช่น:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
ฉันสงสัยว่าจุดประสงค์ของพวกเขาคืออะไร? พวกเขาเป็นเพียงการเคลือบน้ำตาลแบบวากยสัมพันธ์หรือไม่?
คำตอบ:
มันเป็น "การเคลือบน้ำตาล" เพื่อให้อ่านง่าย แต่มีความหมายทั่วไป:
!
ดำเนินการบางอย่างเปลี่ยนแปลงอย่างถาวรหรืออาจเป็นอันตราย ; ตัวอย่างเช่น:
Enumerable#sort
ผลตอบแทนที่ได้รุ่นที่เรียงลำดับของวัตถุในขณะที่Enumerable#sort!
ประเภทไว้ในสถานที่ActiveRecord::Base#save
ส่งกลับเท็จหากการบันทึกล้มเหลวในขณะที่ActiveRecord::Base#save!
มีข้อยกเว้นKernel::exit
ทำให้สคริปต์ออกในขณะที่Kernel::exit!
ทำทันทีโดยข้ามตัวจัดการทางออกใด ๆ?
คืนค่าบูลีนซึ่งทำให้โค้ดไหลได้ง่ายขึ้นเหมือนประโยค - if number.zero?
อ่านว่า "ถ้าตัวเลขเป็นศูนย์" แต่if number.zero
ก็ดูแปลก ๆในตัวอย่างของคุณname.reverse
ประเมินเป็นสตริงที่กลับรายการ แต่หลังจากname.reverse!
บรรทัดเท่านั้นname
ตัวแปรจะมีชื่อที่กลับรายการ name.is_binary_data?
ดูเหมือนว่า "เป็นname
ข้อมูลไบนารีหรือไม่"
Array#clear
ตัวอย่างเช่น มันล้างอาร์เรย์ การล้างอาร์เรย์โดยธรรมชาติจะทำให้มันกลายพันธุ์ ไม่มีอะไรน่าแปลกใจเกี่ยวกับเรื่องนี้ชื่อก็ชัดเจนแล้วดังนั้น: ไม่ปัง ดูruby-forum.com/topic/176830#773946
เครื่องหมายคำถามระบุว่าเมธอดส่งคืนบูลีน ตอบแล้วที่นี่:
ตัวดำเนินการเครื่องหมายคำถามใน Ruby หมายถึงอะไร?
ปังบ่งชี้ว่าเมธอดกระทำกับวัตถุนั้นเอง ตอบแล้วที่นี่:
ใน Ruby ?
หมายความว่าเมธอดจะส่งคืนบูลีนและ!
แก้ไขอ็อบเจ็กต์ที่ถูกเรียกใช้ พวกเขาอยู่ที่นั่นเพื่อปรับปรุงความสามารถในการอ่านเมื่อดูโค้ด
ตรงกันข้ามกับ - ฉันคิดว่า - ภาษาโปรแกรมส่วนใหญ่ ...
Ruby วิธีการได้รับอนุญาตให้ลงท้ายด้วยเครื่องหมายคำถามหรือเครื่องหมายอัศเจรีย์
ตามแบบแผนวิธีการที่ตอบคำถาม (เช่น Array # empty? จะคืนค่าจริงหากตัวรับว่าง) ลงท้ายด้วยเครื่องหมายคำถาม
วิธีการที่อาจเป็น "อันตราย" (เช่นวิธีที่แก้ไขตัวเองหรือข้อโต้แย้งทางออก! ฯลฯ ) โดยการประชุมลงท้ายด้วยเครื่องหมายอัศเจรีย์
จาก: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ ชื่อเมธอดส่วนตลก
?
เรียกว่าวิธีการเพรดิเคต
ระวังนี่ไม่ใช่กรณีเสมอไป ใช้ตัวอย่างเช่นทับทิมอาร์เรย์ # concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat
MyActiveRecordModel.column_names.concat([url])
ที่คุณสามารถรับที่ถูกเผาไหม้ไม่ดีเป็นสิ่งที่ต้องการ การโทรในภายหลังที่เกี่ยวข้องกับ MyActiveRecordModel จะพยายามค้นหาคอลัมน์ของ 'url' สำหรับ MyActiveRecordModel และ throw
แต่คุณต้องโคลนก่อนที่จะทำ concat โชคดีที่ชุดทดสอบของฉันจับชุดนี้ได้ แต่ .. หัวขึ้น!