*
को "स्प्लट ऑपरेटर" कहा जाता है; मुझे यकीन नहीं है कि मैं आपको तकनीकी परिभाषा दे सकता हूं (हालांकि मुझे यकीन है कि आपको Google की मदद से जल्द ही मिल जाएगा), लेकिन जिस तरह से मैं इसका वर्णन करूंगा वह यह है कि यह मूल रूप से हाथ-लेखन एकाधिक स्थान लेता है कोड में अल्पविराम से अलग मूल्य।
इसे और अधिक ठोस बनाने के लिए, Hash[]
के मामले पर विचार करें जिसे आपने अपने उदाहरण में उपयोग किया है। Hash
वर्ग एक []
वर्ग विधि है जो तर्क के परिवर्तनशील लेता है और सामान्य रूप से इस तरह कहा जा सकता है है:
# Returns { "foo" => 1, "bar" => 2 }
h = Hash["foo", 1, "bar", 2]
सूचना कैसे है कि किसी सरणी या एक हैश या कुछ भी है कि मैं में पारित नहीं है, यह मूल्यों का एक (हाथ से लिखित) अनुक्रम है। *
ऑपरेटर आपको मूल रूप से एक ही चीज को एक सरणी का उपयोग करने की अनुमति देता है - आपके मामले में, movie_popularity.sort_by{|m,p| p}.reverse.flatten
द्वारा लौटाया गया।
कि flatten
कॉल के लिए के रूप में: जब आप एक हैश पर sort_by
कहते हैं, क्या तुम सच में Enumerable
मॉड्यूल जो कक्षाओं की एक किस्म (सबसे विशेष रूप Array
और Hash
) कि गणन प्रदान में शामिल है लाभ कर रहे हैं। एक हैश के मामले में, आप शायद देखा है कि बजाय इस तरह से अधिक पुनरावृत्ति की:
hash.each { |value| ... }
इसके बजाय आप ऐसा करते हैं:
hash.each { |key, value| ... }
यही है, एक हैश पैदावार अधिक पुनरावृत्ति दो प्रत्येक पुनरावृत्ति पर मूल्य। तो आपके sort_by
स्वयं पर कॉल जोड़े का अनुक्रम लौटाएगा। इस परिणाम पर flatten
को कॉल करने से जोड़े को मानों के एक-आयामी अनुक्रम में गिरा दिया जाता है, जैसे:
# Returns [1, 2, 3, 4]
[[1, 2], [3, 4]].flatten