我正在看一下AngularJS 2和Typescript,我决定用这个来学习一些打字稿的基础知识.通过许多研究,我找到了关于模块,Typescript的好主题,其中一个讨论了'let'和'var'命令来声明变量; 根据这个问题,下面的Typescript代码应该只显示一个警报并在控制台中抛出错误:
test.ts:
for(let i = 0; i < 1; i++) {
alert(i);
}
alert(i);
Run Code Online (Sandbox Code Playgroud)
编译test.js:
for(var i = 0; i < 1; i++) {
alert(i);
}
alert(i);
//# sourceMappingURL=test.js.map
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.编译器"忽略""let"命令并将其转换为"var"命令.为什么会这样?Typescript只适用于类吗?
我正在使用AngularJS配置'npm start',因此它会自动编译我的'test.ts'文件:
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
"lite": "lite-server",
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings"
},
Run Code Online (Sandbox Code Playgroud) 我找不到一个初学者友好的答案,解决了SML中"local"和"let"关键字之间的区别.有人可以提供一个简单的例子,并解释何时使用另一个?
为了使一个极端的总结,之间的差异var,并let是一个范围之内他们的生活.
(function() {
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(`i: ${i}`);
}, i * 100);
}
// 5, 5, 5, 5, 5
for (let j = 0; j < 5; j++) {
setTimeout(function() {
console.log(`j: ${j}`);
}, 1000 + j * 100);
}
// 0, 1, 2, 3, 4
}());Run Code Online (Sandbox Code Playgroud)
i(声明var)生活在整个function j(声明着let)仅存在于for循环内.对我来说,这意味着javascript,在每次迭代之后,除了声明和赋值给变量之外,let还需要执行额外的步骤:清理 …
我正在阅读简单值部分中的Swift编程语言
"使用let来创建常量,使用var来创建变量.在编译时不需要知道常量的值,但是必须为其分配一次值"
所以我想我能做到这一点
let aConstant:Int
aConstant = 5
Run Code Online (Sandbox Code Playgroud)
但我得让声明需要初始化表达式!
这是为什么 ?它们是什么意思"在编译时不需要知道常量的值"?
我学得很快,但我不是母语为英语的人,只想问'让'意味着什么?我知道它是一个常数但是为什么它不是"缺点"?'let'是某个单词的缩写吗?我不会在不知情的情况下死去,我只是好奇;)谢谢.
我遇到了一个更高级别的令人费解的情况.我想出了如何使它工作,但我不明白工作和非工作版本之间的区别.
有了这些背景定义:
{-# LANGUAGE RankNTypes #-}
data AugmentedRational = Exact Integer Rational -- Exact z q is q * pi^z
| Approximate (forall a.Floating a => a)
approximateValue :: Floating a => AugmentedRational -> a
approximateValue (Exact z q) = (pi ** (fromInteger z)) * (fromRational q)
approximateValue (Approximate x) = x
Run Code Online (Sandbox Code Playgroud)
......这两个功能有什么区别.
-- lift a floating function to operate on augmented rationals, treating the function as approximate
approx :: (forall a.Floating a => a -> a) -> AugmentedRational …Run Code Online (Sandbox Code Playgroud) let/ const代替var以后进行维护?(这来自Airbnb风格指南)open System
let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q
let y = Some(1, 2)
try
let None = y
()
with
| ex -> printfn "C %A" ex
let Some(r, s) = y
printfn "D %A" y
// printfn "E %A %A" r s
Run Code Online (Sandbox Code Playgroud)
当我取消注释最后一行时,编译器拒绝代码抱怨
/home/rRiy1O/prog.fs(16,19):错误FS0039:值或构造函数'r'未定义
/home/rRiy1O/prog.fs(16,21):错误FS0039:值或构造函数的' 没有定义
是不允许在解构中使用枚举let?
但首先,甚至当我注释掉最后一行...什么我在这里干什么?这是输出:
A (1, 2)
B 1 2
D Some (1, 2)
Run Code Online (Sandbox Code Playgroud)
为了记录,这是固定版本: …
为什么read_rest_of_csv下面需要括号?
let read_rest_of_csv() =
csv_data.Add(csv_fileH.ReadFields()) |> ignore
not csv_fileH.EndOfData
while read_rest_of_csv() do ignore None
Run Code Online (Sandbox Code Playgroud)
如果没有括号,循环将不会终止.
open System
open System.Threading
open System.Collections.Generic
open System.Linq
open System.Text
open System.Threading.Tasks
open System.IO
open Microsoft.VisualBasic.FileIO
[<EntryPoint>]
let main argv =
let csv_fileH = new TextFieldParser("test1.csv")
csv_fileH.TextFieldType = FieldType.Delimited |> ignore
let x = csv_fileH.SetDelimiters(",")
let csv_data = new List<string[]>()
let eod = csv_fileH.EndOfData
if not eod then
let column_headings = csv_fileH.ReadFields()
csv_data.Add(column_headings) |> ignore
let read_rest_of_csv =
csv_data.Add(csv_fileH.ReadFields()) |> ignore
not csv_fileH.EndOfData …Run Code Online (Sandbox Code Playgroud) Common Lisp中的新手问题:
如何使我的过程每次调用时都返回具有自己的本地绑定的不同过程对象?当前,我使用let创建本地状态,但是两个函数调用共享相同的本地状态。这是代码,
(defun make-acc ()
(let ((balance 100))
(defun withdraw (amount)
(setf balance (- balance amount))
(print balance))
(defun deposit (amount)
(setf balance (+ balance amount))
(print balance))
(lambda (m)
(cond ((equal m 'withdraw)
(lambda (x) (withdraw x)))
((equal m 'deposit)
(lambda (x) (deposit x)))))))
;; test
(setf peter-acc (make-acc))
(setf paul-acc (make-acc))
(funcall (funcall peter-acc 'withdraw) 10)
;; Give 90
(funcall (funcall paul-acc 'withdraw) 10)
;; Expect 90 but give 80
Run Code Online (Sandbox Code Playgroud)
我应该用其他方式吗?我的写作方式有误吗?有人可以帮我解决这个疑问吗?提前致谢。
let ×10
javascript ×3
var ×3
constants ×2
f# ×2
swift ×2
common-lisp ×1
haskell ×1
ios ×1
lisp ×1
local ×1
performance ×1
scope ×1
sml ×1
state ×1
typescript ×1