3 1 3 宣告可變值

2021-06-25 14:31:00 字數 1064 閱讀 3044

3.1.3 宣告可變值

在 3.1.1 節,我們宣告過乙個整數型別值,let number = 10。如果你很好奇,嘗試進行修改,可能會寫出類似 number = 10。這不起作用,因為在 f# 中,let 繫結之外的等於號只用於值的比較。**雖然有效,但它可能會返回 false(除非 number 的值碰巧也是10)。在 f# 中修改已有的值幾乎是不可能的。

事實並非如此,因為 f# 是務實的,有時你可能需要在 f# 中使用可變的值。這種情況最有可能發生在優化**,或者使用可變的 .net 物件時。清單 3.4 演示了如何在f# 中使用不可變和可變值,以及可變值的運算子。

清單 3.4 宣告可變值(f# interactive)

> let n1 = 22;;  [1]

val n1 : int

> n1 <- 23;;                         |  [2]

error fs0027: this value is not mutable.  |

> let mutable n2 = 22;;  [3]

val mutable n2 : int

> n2 <- 23;;  |  [4]

> n2;;       |

val it : int = 23

值預設情況下,f# 中所有的值都是不可變的,因此,我們用通常的 let 繫結語法[1]宣告的值,以後想使用賦值運算子(<-)對它進行修改,就會出現編譯錯誤[2]。要宣告可變的變數,必須顯式使用 mutable 關鍵字[3]。這樣,以後再使用賦值運算子對此值進行修改,從輸出可以看到值已改變[4]。

注意應該養成盡可能在 f# 中使用不可變值的習慣,只在真正必要時才使用可變值,並不是因為這樣就一定是錯的,而是不合乎語言習慣。函式式思維將使**更簡潔,更易於閱讀和理解。當然,不要指望這會在一夜之間發生,但是,隨著使用語言越多,而不是與習慣用法作對,就可能更多地從中擺脫。[是說使用可變值嗎?]

這一節,我們已經學習了相當多的基本概念,但這是學習這一章核心部分之前所必須的。正如我們在第一章中提到過的,不可變性的預設用法不僅影響區域性值的宣告,而且還延伸到資料結構。在下一節,我們將討論函式程式設計中最基本的不可變型別。

12 5 1 宣告計算型別

12.5.1 宣告計算型別 清單 12.17 顯示了在 c 和 f 中的型別宣告。在 c 中,我們建立簡單的類,在 f 中,將使用乙個簡單的只有一種情況的差別聯合。listing 12.17 value of the computation in c and f c 的類是乙個簡單的不可變型別,儲存...

10 宣告式事務

1.程式設計式事務 由程式設計師程式設計事務控制 opensessionlnview程式設計式事務 2.宣告式事務 事務控制 已經由spring寫好,程式設計師只需要宣告出哪些方法需要進行事務控制和如何進行事務控制。這裡講解的是 註解配置事務,如果想去理解xml的同學 可以看看其它的 這裡只講解註解...

1 3 2 宣告式程式設計風格

1.3.2 宣告式程式設計風格 用宣告式程式設計風格,我們表達的程式邏輯無需說明執行細節。這個描述聽起來有些耳熟,因為它十分類似於我們在 1.1 節中看到的函式式程式設計的定義。但宣告式程式設計是更為一般的概念,可以使用不同技術來實現 函式式程式設計只是實現這一目標的一種方法。我們看乙個演示,如何用...