मान लीजिए कि इस तरह परिभाषित एक फ़ंक्शन:
def composition(text : String, k : Int32) : Array(String)
kmers = Array(String).new
(0 .. text.size - k).each do |i|
kmers << text[i, k]
yield text[i, k]
end
return kmers
end
मैं कैसे जांचूं कि फ़ंक्शन के अंदर ब्लॉक तर्क दिया गया है या नहीं? यदि ब्लॉक तर्क दिया जाता है, तो किमीर्स प्राप्त होंगे। यदि नहीं दिया जाता है, तो किमी को स्ट्रिंग्स की एक सरणी के रूप में वापस कर दिया जाएगा।
2 जवाब
इस तरह की जांच असंभव है, क्योंकि किसी ब्लॉक को स्वीकार करने वाली एक विधि (कहीं भी yield
का उपयोग करके) बस एक अलग हस्ताक्षर है। लेकिन इसका मतलब यह भी है कि आपको चेक की जरूरत नहीं है, बस इस तरह से 2 तरीके बनाएं:
# if you want to be explicit (makes no difference):
# def composition(text : String, k : Int32, &block)
def composition(text : String, k : Int32)
(0 .. text.size - k).each do |i|
yield text[i, k]
end
end
def composition(text : String, k : Int32) : Array(String)
kmers = [] of String
composition(text, k) do |s|
kmers << s
end
return kmers
end
आपकी विशिष्ट स्थिति में, मैं ओलेह के उत्तर की अनुशंसा करता हूं। हालांकि, यहां एक अधिक सामान्य समाधान है जो आपको यह निर्धारित करने देता है कि कोई ब्लॉक पारित किया गया है या नहीं:
def composition(text, k, &block : String ->)
composition(text, k, block)
end
def composition(text, k, block : (String ->)? = nil)
kmers = [] of String
(0 .. text.size - k).each do |i|
s = text[i, k]
if block
block.call s
else
kmers << s
end
end
kmers
end
(Proc
सिंटैक्स पर अधिक जानकारी के लिए, देखें https://crystal -lang.org/reference/syntax_and_semantics/type_grammar.html#proc)
संबंधित सवाल
नए सवाल
crystal-lang
क्रिस्टल एक प्रोग्रामिंग लैंग्वेज है जिसमें रूबी प्रेरित सिंटैक्स होता है, लेकिन स्टेटिक और कुशल कोड के लिए संकलित और संकलित होता है।