9
A
回答
25
是:
let (+.) x s = [for y in s -> x + y]
let s = 1 +. [2;3;4]
,可以在F#操作者使用的字符列於section 3.7 of the spec。它們分別是!%&*+-./<=>@^|~
和之後的任何字符,?
。優先級和固定性由操作員的第一個字符確定(請參閱規格)。
你可以像上面所做的那樣創建你自己的let-bound操作符,在這種情況下,它們就像let-bound函數一樣工作。您也可以將它們定義爲成員類型:
type 'a Wrapper = Wrapper of 'a with
static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let w = (Wrapper 1) +! (Wrapper 2)
在這種情況下,你並不需要有預先定義的,讓綁定功能,使用操作; F#會在類型上找到它。你可以採取特別好的利用了這一點使用內置定義:
let inline addSpecial a b = a +! b
let w2 = addSpecial w (Wrapper 3)
採取這一更進一步,可以使運營商在你的類型的內聯爲好,這樣就可以在一個更加廣泛的實例使用它們你的課程:
type 'a Wrapper = Wrapper of 'a with
static member inline (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let wi = (Wrapper 1) +! (Wrapper 2)
let wf = (Wrapper 1.0) +! (Wrapper 2.0)
let wi2 = addSpecial wi wi
let wf2 = addSpecial wf wf
+3
第4.4節(http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html)有關於中綴操作符的更多信息以及允許使用哪些字符。 – nlucaroni 2010-02-05 22:39:20
相關問題
- 1. 你可以在F#中定義一個運算符(***)嗎?
- 2. 你可以在Drupal中創建你自己的鉤子嗎?
- 3. 你可以修改你自己的頁面表(操作系統相關)嗎?
- 4. 你可以在你自己的服務器上運行jekyll嗎?
- 5. 你可以引用一個在struct中定義的朋友操作符嗎?
- 6. 是否可以在Rascal中定義自己的操作符?
- 7. 爲什麼你不能在Regexes中定義你自己的自定義charclasses?
- 8. 你可以在硒中使用typeof操作符嗎?
- 9. 你可以在scala中編寫自己的存在方法嗎?
- 10. 在張量流中,你能定義你自己的收藏名嗎?
- 11. 你可以在你自己的數據庫中使用ASP.NET成員資格嗎?
- 12. 你可以在Python中引用自己的類嗎?
- 13. 你可以在SQL中編寫自定義聚合函數嗎?你可以查詢分組的內容嗎?
- 14. 你可以自定義一份工作嗎?
- 15. 你可以在Branch.io橫幅中自定義顯示reviewCount嗎?
- 16. 你可以定義DOM Helper嗎?
- 17. 製作你自己的pow()
- 18. 你可以在Facebook時間軸上自定義帖子嗎?
- 19. F#自定義操作符,返回
- 20. 你可以編寫你自己的Java隨機數發生器嗎?
- 21. 你可以爲你自己的應用程序使用二進制DLL嗎?
- 22. 你可以在'for-loop'中使用位移操作嗎?
- 23. 你可以在HTTP請求中執行長操作嗎?
- 24. F#有它自己的字符串操作庫嗎?
- 25. 你可以創建自己的任務配置嗎?
- 26. 可以用你自己的initWithFrame初始化一個類嗎?
- 27. 你可以從它自己的json對象調用數據嗎?
- 28. 你可以創建自己的JTA交易嗎?
- 29. 你可以去python中的文件操作行嗎?
- 30. 你可以切換操作員的邊+
爲了您將來的參考瓊 - 這個概念被稱爲運算符重載。如果你使用Google F#和運算符重載,你會發現很多關於這個主題的內容。 – 2010-02-06 00:41:39
謝謝,未來會這樣做。 – 2010-02-08 17:42:34