2013-08-21 8 views
6

this question मुझे आश्चर्य है कि कैसे (या अगर) मैं सामान्य एफ # ऐरे प्रकार का विस्तार कर सकता हूं। मैं ऐसा कर सकता है:एफ # जेनेरिक सरणी प्रकार कैसे बढ़ाया जाए?

type System.Array with 
    member a.Last = a.GetValue(a.Length - 1) 

लेकिन जैसा कि टॉमस उल्लेख यह गैर सामान्य है। अगला मैं इस कोशिश की, लेकिन यह काम नहीं करता है:

type Microsoft.FSharp.Collections.Array with // Error: Array is not defined  
    member a.Last = a.[a.Length - 1] 

एफ # scource मैं इस नाम स्थान पाया है, लेकिन यह या तो काम नहीं करता:

type Microsoft.FSharp.Primitives.Basics.Array with // Error: Array is not defined   
    member a.Last = a.[a.Length - 1] 

उत्तर

16

इसमें कुछ समय भ्रामक है - लेकिन मैं हाल ही में था एफ # विनिर्देश में कुछ की तलाश में है और इस में आए:

type 'T ``[]`` with 
    member a.Last = a.[a.Length - 1] 

[| 1 .. 10 |].Last 

डबल बैकटिक एन्कोडिंग सामान्य रूप से वैध एफ # पहचान में बदल आरक्षित कीवर्ड चालू करने के लिए (उदाहरण के लिए यदि आप एक गुण करना चाहते हैं प्रयोग किया जाता है y जिसमें नाम में एक स्थान है, या let नाम दिया गया है)। यहां, इसका शायद मतलब है कि कंपाइलर को [] को सरणी के लिए विशेष वाक्यविन्यास के बजाय सामान्य प्रकार "नाम" के रूप में इलाज करने की आवश्यकता है।

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