आपका पैटर्न डिफ़ॉल्ट (वैकल्पिक) तर्कों के लिए पैटर्न-मिलान करने के तरीके के कारण काम नहीं करता है, और क्योंकि आपने सिर को RGBColor
पर प्रतिबंधित कर दिया है। समस्या यह है कि डिफ़ॉल्ट तर्क मान पैटर्न से मेल खाना चाहिए, जबकि Unevaluated[Sequence[]]
निश्चित रूप से _RGBColor
से मेल नहीं खाता है।
आपके पास कई तरीके हैं। एक पहला प्रयास अपने प्रकार-चेकिंग कमजोर करने के लिए है:
In[10]:= style[Line[],Thickness[0.01]]/.
style[line_Line,___,color_: [email protected][],___]:>{color,line}
Out[10]= {Thickness[0.01],Line[]}
लेकिन यह काम नहीं करता है के बाद से मिलान सही नहीं है - टाइपिंग वास्तव में बहुत कमजोर है।
In[14]:= style[Line[], RGBColor[{}]] /.
style[line_Line, ___, color : (_RGBColor | _Unevaluated) :
[email protected][], ___] :> {[email protected], line}
Out[14]= {RGBColor[{}], Line[]}
In[15]:= style[Line[], Thickness[0.01]] /.
style[line_Line, ___, color : (_RGBColor | _Unevaluated) :
[email protected][], ___] :> {[email protected], line}
Out[15]= {Line[]}
यह करने के लिए सुझाया गया तरीका यह है::
In[18]:= style[Line[], Thickness[0.01]] /.
style[line_Line, ___, color : (_RGBColor | Automatic) : Automatic, ___] :>
If[color === Automatic, {line}, {color, line}]
Out[18]= {Line[]}
In[17]:= style[Line[], RGBColor[{}]] /.
style[line_Line, ___, color : (_RGBColor | Automatic) : Automatic, ___] :>
If[color === Automatic, {line}, {color, line}]
Out[17]= {RGBColor[{}], Line[]}
पैटर्न मिलान की यह सुविधा बहुत व्यापक रूप से ज्ञात नहीं है, इसलिए मैं तनाव होगा यह काम करने के लिए hacky तरीका यह है इसे दोबारा: (वैकल्पिक) पैटर्न x:ptrn:default
के लिए डिफ़ॉल्ट मान ptrn
से मेल खाना चाहिए। इस तरह के व्यवहार के एक और उदाहरण के लिए, this गणित चर्चा देखें।
धन्यवाद! क्या यह सुविधा पूरी तरह से अनियंत्रित है? –
मैंने इसे दस्तावेज नहीं देखा है, लेकिन हो सकता है कि मैं पर्याप्त ध्यान नहीं दे रहा था और यह दस्तावेज़ीकरण में कहीं लिखा गया है। –