簡體   English   中英

F#Literal / constant可以用字符串組成,但不能用int組成?

[英]F# Literal/constant can be composed with strings, but not int?

為什么這樣可以:

let [<Literal>] hi = "hi"
let [<Literal>] bye = "bye"
let [<Literal>] shortMeeting = hi + bye

......但這不是?

let [<Literal>] me = 1
let [<Literal>] you = 1
let [<Literal>] we = me + you

第三行給出錯誤:

This is not a valid constant expression

那是怎么回事?

所以spec / docs有點不清楚,但提供了提示。

從規范(對於F#3.0):

具有Literal屬性的值受以下限制:

它可能沒有標記為可變或內聯。 它可能也沒有ThreadStaticor ContextStatic屬性。 右側表達式必須是由以下任一組成的文字常量表達式:

一個簡單的常量表達式,除了(),本機整數文字,無符號本機整數文字,字節數組文字,BigInteger文字和用戶定義的數字文字。

要么

對另一個文字的引用

這似乎暗示即使是字符串的組合也是不允許的。

文檔說明這在F#3.1中發生了變化:

https://msdn.microsoft.com/en-us/library/dd233193.aspx

從F#3.1開始,您可以使用+號組合字符串文字。 您還可以使用按位或(|||)運算符來組合枚舉標志。 例如,以下代碼在F#3.1中是合法的:

請注意,整數添加不在該列表中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM