在VB6/VBA中,您可以在特定Sub或Function方法之外声明模块级变量.我用Private与Public前内部模块和理解他们,像这样:
Public - 模块内的所有代码和模块外的所有代码都可见,实际上使其成为全局代码.Private - 仅对模块内的代码可见.我注意到你可以使用Dim和Global作为模块变量的修饰符.是Dim与Global从不同Private,并Public分别作为模块化领域访问修饰符使用时?如果是这样,他们有什么不同?
if(true)
{
string var = "VAR";
}
string var = "New VAR!";
Run Code Online (Sandbox Code Playgroud)
这将导致:
错误1在此范围内无法声明名为"var"的局部变量,因为它会为"var"赋予不同的含义,"var"已在"子"范围中用于表示其他内容.
什么都没有惊天动地,但这不是一般的错误吗?一位开发人员和我想知道第一个声明是否应该在不同的范围内,因此第二个声明不能干扰第一个声明.
为什么C#无法区分这两个范围?第一个IF范围是否应该与方法的其余部分完全分开?
我无法从if外部调用var,因此错误消息是错误的,因为第一个var在第二个范围内没有相关性.
我想我会问...但是有没有办法让公共部分属性可用,但保持私有?
否则我认为我需要两个属性或属性和方法,只是认为这将更清洁.
我的项目根目录中有一个CMakeLists.txt,而我的/ src文件夹中有一个./ src文件夹中的那个只包含一个带有.cpp文件(set (SOURCEFILES main.cpp foo.cpp))的变量,并且在我做的根CMakeLists.txt中add_subdirectory(src),后来我做了add_executable(MyApp ${SOURCEFILES}).
但是cmake给了我错误
调用add_executable时参数数量不正确,未提供任何来源
如何让cmake查看变量?我读到cmake只知道全局变量,但显然并非如此......
我对lambda变量的范围感到困惑,例如以下内容
var query =
from customer in clist
from order in olist
.Where(o => o.CustomerID == customer.CustomerID && o.OrderDate == // line 1
olist.Where(o1 => o1.CustomerID == customer.CustomerID) // line 2
.Max(o1 => o1.OrderDate) // line 3
)
select new {
customer.CustomerID,
customer.Name,
customer.Address,
order.Product,
order.OrderDate
};
Run Code Online (Sandbox Code Playgroud)
在第1行中,我声明了一个lambda变量'o',这意味着我不能在第2行再次声明它(或者至少编译器在我尝试时会抱怨)但是即使'o1'已经存在,它也不会抱怨第3行??
lambda变量的范围是什么?
我在尝试理解python范围规则时遇到了麻烦.
使用以下脚本:
a = 7
def printA():
print "Value of a is %d" % (a)
def setA(value):
a = value
print "Inside setA, a is now %d" %(a)
print "Before setA"
printA()
setA(42)
print "After setA"
printA()
Run Code Online (Sandbox Code Playgroud)
给出了意想不到的(对我来说)输出:
Before setA
Value of a is 7
Inside setA, a is now 42
After setA
Value of a is 7
我希望最后一次打印a的值为42,而不是7.我对Python的全局变量范围规则缺少什么?
我想知道头文件中的静态变量与类中声明的静态变量之间的区别.在头文件中声明静态变量时,其范围仅限于.h文件或所有单元.一般来说静态变量在类中声明时在.cpp文件中初始化了吗?那么这是否意味着静态变量范围仅限于2个编译单元?
PowerShell的一个令人遗憾的事情是函数和脚本块是动态范围的.
但另一件让我感到惊讶的事情是变量在内部范围内表现为写时复制.
$array=@("g")
function foo()
{
$array += "h"
Write-Host $array
}
& {
$array +="s"
Write-Host $array
}
foo
Write-Host $array
Run Code Online (Sandbox Code Playgroud)
输出是:
g s
g h
g
Run Code Online (Sandbox Code Playgroud)
这使动态范围变得不那么痛苦.但是我如何避免写时复制?
在尝试为Sublime Text 2编写自己的代码片段时,我遇到了以下两个问题:
查找范围键.我发现我可以逐个查看我的包,并找到对声明的"范围"属性的引用.例如在~/Library/Application Support/Sublime Text 2/Packages/JavaScript/Comments.tmPreferences(我的HTML包中的文件)中有以下两行:
<key>scope</key>
<string>source.js</string>
Run Code Online (Sandbox Code Playgroud)
因此,如果我希望我的当前代码段能够处理javascript文件,我将我的范围定义为:
<scope>source.js</scope>
Run Code Online (Sandbox Code Playgroud)
我假设所有这些范围键都是根据我安装的软件包即时定义的.Sublime Text是否在我可以更容易引用的任何地方构建列表?仔细阅读一堆包文件似乎过于繁琐.
定义多个范围属性.我已经想到了,以下行允许我的代码段在HTML和JavaScript文件中工作.
<scope>text.html, source.js</scope>
Run Code Online (Sandbox Code Playgroud)由于信息安全限制,我在产品上有默认范围.
class Product < ActiveRecord::Base
has_many :photos
default_scope where('visible = 1')
end
Run Code Online (Sandbox Code Playgroud)
但是,在我的相关照片模型中,我还必须找到不可见的产品.
class Photo < ActiveRecord::Base
belongs_to :product
end
my_photo.product
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我可以使用unscoped来绕过default_scope,例如在Product.unscoped.find_by_title('abc').然而:
如何在使用记录关联时删除范围?
my_photo.unscoped.product因为my_photo没有调用方法,所以没有意义unscoped.也没有my_photo.product.unscoped任何意义,因为my_photo.product可能已经是零.
scope ×10
c# ×2
arel ×1
c++ ×1
cmake ×1
lambda ×1
powershell ×1
properties ×1
python ×1
static ×1
sublimetext2 ×1
vb.net ×1
vb6 ×1
vba ×1