C中的static关键字是否仅用于将变量的作用域限制为单个文件?
我想知道我的理解是否正确。请假设以下3个文件:
file1.c
int a;
file2.c
int b;
file3.c
static int c;
现在,如果这3个文件一起编译,那么变量"a“和"b”应该有一个全局作用域,并且可以从这3个文件中的任何一个文件访问。但是,变量"c“是静态的,只能从file3.c访问,对吗?
static在C中还有其他用途吗?(除了如上所示限制变量的作用域之外?)
function f1(x = 2, f = function() {x = 3;}) {
let x = 5;
f();
console.log(x);
}
f1();
在这段代码中,有一个语法错误,上面写着Identifier 'x' has already been declared。很明显,我们不能在一个范围内使用let重新声明变量。但我不知道为什么在这段代码中我们仍然会出现这个错误,因为在ES6默认参数中,实际上会创建另一个称为参数环境的范围。
如果函数的形式参数不包括任何默认值初始化器,则在与参数相同的环境记录中实例化主体声明。如果存在默认值
我一直在使用Flux.jl,在let块中运行代码和不运行代码时,我对这些差异感到困惑。下面的示例运行时没有错误:
using Flux
p = rand(2)
function f(x)
f, b = p
x*f + b
end
data = reduce(hcat, [[x, f(x)] for x in 0:0.1:1.0])
p = rand(2)
θ = params(p)
loss(y) = sum((y .- f.(data[1,:])).^2)
for n in 1:1000
grads = Flux.gradient(θ) do
好吧,那就简单一点.我一点也不了解范围。每当我在函数的内部放置一个变量时,做一些原因--它是未定义的。它似乎是唯一的方法,它的工作,它声明它以外的一个函数。那是怎么回事?我是否只是误解了局部变量和全局变量的概念?因为似乎只有全局变量起作用..。
编辑:
简单的例子。
let a = 'something';
function myFunction() {
// Code block
};
这行得通
但以下是未定义的变量:
function myFunction() {
let a = 'something';
// Code bloc
我的函数确实在工作;它经过了测试,并且一度得到了认可。
下面是函数原型:
function [X Y] = calculateEllipse(x, y, a, b, angle)
%# Code here
end
下面是我从Matlab终端发出的调用:
calculateEllipse (612, 391, 107, 60, 331)
下面是出现在我面前的错误:
??? Undefined function or method 'calculateEllipse' for input arguments of
type 'double'.
现在,我100%确定我