คุณอาจคุ้นเคยกับการชวเลข Ruby ต่อไปนี้ ( a
คืออาร์เรย์):
a.map(&:method)
ตัวอย่างเช่นลองทำสิ่งต่อไปนี้ใน irb:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
ไวยากรณ์คือชวเลขเป็นa.map(&:class)
a.map {|x| x.class}
อ่านเพิ่มเติมเกี่ยวกับรูปแบบนี้ใน " อะไรแผนที่ (และชื่อ) หมายถึงในทับทิม "
ด้วยไวยากรณ์&:class
คุณกำลังเรียกใช้เมธอดclass
สำหรับแต่ละองค์ประกอบอาร์เรย์
คำถามของฉันคือคุณสามารถระบุข้อโต้แย้งในการเรียกใช้เมธอดได้หรือไม่? และถ้าเป็นเช่นนั้นอย่างไร?
ตัวอย่างเช่นคุณจะแปลงไวยากรณ์ต่อไปนี้ได้อย่างไร
a = [1,3,5,7,9]
a.map {|x| x + 2}
กับ&:
ไวยากรณ์?
ฉันไม่ได้แนะนำว่า&:
ไวยากรณ์จะดีกว่า ฉันสนใจแค่กลศาสตร์การใช้&:
ไวยากรณ์กับอาร์กิวเมนต์
ฉันถือว่าคุณรู้ว่า+
เป็นวิธีการในคลาสจำนวนเต็ม คุณสามารถลองสิ่งต่อไปนี้ใน irb:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2