2009-11-13 15 views
36

लाइनरूबी: क्या में "पी * 1..10" तारांकन करता है मतलब

p *1..10 

करता है बिल्कुल के रूप में

(1..10).each { |x| puts x } 

जो आप निम्नलिखित उत्पादन देता है एक ही बात:

$ ruby -e "p *1..10" 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

उदाहरण के लिए टेक्स्टमेट के साथ काम करते समय यह एक महान शॉर्टकट है, लेकिन तारांकन क्या करता है? वह कैसे काम करता है? नेट पर कुछ भी नहीं मिला ...

उत्तर

60

यह splat operator है। आप अक्सर एक सरणी को किसी फ़ंक्शन में पैरामीटर में विभाजित करने के लिए उपयोग करते हैं।

def my_function(param1, param2, param3) 
    param1 + param2 + param3 
end 

my_values = [2, 3, 5] 

my_function(*my_values) # returns 10 

अधिक सामान्यतः यह तर्क का एक मनमाना संख्या को स्वीकार करने के लिए किया जाता है

def my_other_function(to_add, *other_args) 
    other_args.map { |arg| arg + to_add } 
end 

my_other_function(1, 6, 7, 8) # returns [7, 8, 9] 

यह भी कई कार्य के लिए काम करता है (सूचक के बिना, हालांकि इन दोनों कथनों के लिए काम करेंगे):

first, second, third = *my_values 
*my_new_array = 7, 11, 13 

आपके उदाहरण के लिए, ये दोनों बराबर होंगे:

p *1..10 
p 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
+1

मुझे लगता है कि ए, बी, सी = * myvalues ​​ ए, बी, सी = myvalues ​​ के बराबर है या इस मामले में स्प्लट ऑपरेटर का उपयोग करके निस्संदेह रूबी है? –

+0

@ पैट्रिक हां, असाइनमेंट जहां एक तरफ एक ऑब्जेक्ट है और दूसरी ओर कई ऑब्जेक्ट्स एक स्प्लट ऑपरेटर को इंगित करेंगे। तो यह एक बहुत ही उपयोगी उदाहरण नहीं है, मुझे लगता है। – Neall

संबंधित मुद्दे