我正在用 VS 学习 F#。
你能告诉我为什么编译器用下面的代码给我一个错误 FS3118 吗?
sumToN 之前的“let”在线条下用红色标记...
FS3118:不完整的值或函数定义。如果这是在表达式中,则表达式的主体必须缩进与“let”关键字相同的列。
open System
[<EntryPoint>]
let main argv =
let sumToN n = let rec f s n = if n > 0L then f (s+n) (n-1L) else s in f 0L n
//let sum = sumToN(5L)
//do printfn "%i" sum |> ignore
0
Run Code Online (Sandbox Code Playgroud)
我应该如何更正代码?
我有一个这样的代码(在操场上玩:
protocol ServiceProtocol {
var enabled: Bool { get set }
}
class Service: ServiceProtocol {
var enabled: Bool = false
}
class A {
let service = Service()
}
class B {
let service: ServiceProtocol = Service()
}
let a = A()
let b = B()
a.service.enabled = false
b.service.enabled = false // <-- the error is here: Cannot assign to property: 'service' is a 'let' constant
Run Code Online (Sandbox Code Playgroud)
如果我引用service为Service(class A),则一切都按预期进行。在 class 中B,service …
我有这些
data Fruit = Peach | Apple | Pear | Lemon | Fig deriving (Show,Eq)
data FTree = Bud | Split FTree FTree | Flat Fruit FTree deriving (Show,Eq)
Run Code Online (Sandbox Code Playgroud)
这意味着计算输入的水果类型的出现次数
ftreeFOccurs cft ft =
let ftFO Bud = 0
ftFO (Flat frt ft) = if (frt == cft) then (1 + (ftFO ft)) else (ftFO ft)
ftFO (Split ft1 ft2) = (Split (ftFO ft1) (ftFO ft2))
in ftFO ft
Run Code Online (Sandbox Code Playgroud)
这将是一棵典型的树
Split (Split Bud Bud) (Flat Fig (Flat Lemon (Flat Apple …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以向我解释在带有 livedata 的 lambda 表达式中让这个词。只是打印lamda表达式吗?我猜有些人用它来不再获得空指针异常?
wordViewModel.allWords.observe(this, Observer { value ->
value?.let { /*DO SOMETHING WITH VALUE ('IT')*/ }
})
Run Code Online (Sandbox Code Playgroud) 使用let或do尝试使用Monadic值有什么区别?(不确定这是否是表达它的正确方法)
例如:
--import System.Random
*Main> dupRand = let i = randomRIO (1, 10) in sequence [i, i]
*Main> :t dupRand
dupRand :: (Random a, Num a) => IO [a]
*Main> dupRand
[8,3]
*Main> dupRand
[2,9]
*Main> dupRand
[9,5]
*Main> dupRand2 = do i <- randomRIO (1, 10); pure [i, i]
*Main> :t dupRand2
dupRand2 :: (Random a, Num a) => IO [a]
*Main> dupRand2
[6,6]
*Main> dupRand2
[9,9]
*Main> dupRand2
[5,5]
Run Code Online (Sandbox Code Playgroud)
为什么在中dupRand2,该函数成功复制了一个随机值,而在中dupRand,该函数看起来好像它生成了两个随机值?
我正在 Swift 中学习数组,在我的书中他们首先写道:
let numbers = [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但是然后写:
var numbers = [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我知道这let表示常量并var指代变量,但实际上声明为常量的数组和声明为变量的数组有何不同?