मैं रूबी में प्रोग्रामिंग के लिए नया हूं और मैंने देखा है कि इसमें कुछ कार्यात्मक क्षमताएं हैं। सोच रहा था कि क्या एरेज़ पर पैटर्न मैच करने का कोई तरीका है; मैं निम्नलिखित को पूरा करने के लिए देख रहा हूँ:
split_string = str.split("_", 2)
fst = repo_branch_split.first
snd = repo_branch_split.second
एक हास्केल की तरह तरीके से:
split_string@(fst : snd) = str.split("_", 2)
माणिक में भी कुछ ऐसा ही है या नहीं?
उत्तर:
जवाब के लिए 9 № 1यह रूबी में एक समानांतर असाइनमेंट है। आप चर को इस तरह से असाइन कर सकते हैं
fst, snd = str.split("_", 2)
बाकी सरणी को एकल चर में असाइन करके आप हास्केल से सिर / पूंछ का व्यवहार भी प्राप्त कर सकते हैं:
head, *tail = "foo_bar_baz".split("_")
# head => "foo"
# tail => ["bar", "baz"]
बिना स्टार के tail
, यह केवल असाइन करेगा bar
स्ट्रिंग और baz
"गायब" हो जाएगा।
जवाब के लिए 2 № 2
बहुत ज्यादा मेल खाता हुआ। प्रयत्न
fst, snd = str.split("_", 2)
उत्तर № 3 के लिए 1
@smefju का जवाब अच्छा है, लेकिन मैं सिर्फ एक ऐसा तरीका साझा करूंगा जो आप और भी अधिक कर सकते हैं विनाशकारी असाइनमेंट माणिक का उपयोग करना
def foo &f
# watch the array get destructured in the block below
f.call [1,2,3,4,5], :sweet, :candy
end
# first block param is array, so we can destructure it if you want
foo do |(x,*xs),y,z|
puts %Q{
x: #{x}
xs: #{xs}
y: #{y}
z: #{z}
}
end
उत्पादन
x: 1
xs: [2, 3, 4, 5]
y: sweet
z: candy
यह सभी प्रकार से उपयोगी है
hash = {a: 1, b: 2, c: 3}
hash.reduce({}) do |acc,(k,v)|
puts %Q{
acc: #{acc}
k: #{k}
v: #{v}
}
acc.merge(k => v * v)
end
उत्पादन
acc: {}
k: a
v: 1
acc: {:a=>1}
k: b
v: 2
acc: {:a=>1, :b=>4}
k: c
v: 3
=> {:a=>1, :b=>4, :c=>9}
एरो थ्रो को नष्ट करने के अलावा, रूबी की इस विभाग में बहुत कमी है। आप "सत्य हैश को नष्ट नहीं कर सकते हैं और वास्तविक जैसी कोई चीज नहीं है पैटर्न मिलान रूबी में