标签: scoping

有哪些方法来模块化C代码?

您知道在项目规模扩大时模块化C代码有哪些方法,实践和约定?

c encapsulation namespaces module scoping

12
推荐指数
3
解决办法
2618
查看次数

为什么在嵌套的FOR循环中使用相同的count变量名称有效?

为什么以下不会出错?

for (int i=0; i<10; ++i) // outer loop
{
    for (int i=0; i<10;++i) // inner loop
    {
    //...do something
    }
//...do something else
}
Run Code Online (Sandbox Code Playgroud)

我理解它的方式,大括号({...})中的变量只在这些大括号内.但是内环在外环的支撑内.因此,一旦我声明int i=0内部循环,我不应该得到有关多个定义的错误吗?

c++ scoping

12
推荐指数
1
解决办法
6733
查看次数

有没有办法访问makeActiveBinding安装的函数?

标题基本上都说明了一切.

如果我这样做......

makeActiveBinding("x", function() runif(2), .GlobalEnv)
x
# [1] 0.7332872 0.4707796
x
# [1] 0.5500310 0.5013099
Run Code Online (Sandbox Code Playgroud)

...那么我有什么方法可以检查x它与哪个功能相关联(如果没有,为什么不呢)?

(在这种情况下,我希望能够学习x被定义为function() runif(2).)

r scoping

12
推荐指数
1
解决办法
303
查看次数

为什么这个python代码表现出奇怪的范围规则

我正在运行Python 2.7.8(Anaconda Distribution),这段代码失败了.这看起来像Python实现中的一个错误,但我错过了什么?

class C:
    x = {2 : 1}
    y = {w for w in x if x[w]==1}
Run Code Online (Sandbox Code Playgroud)

运行此代码会出现以下错误消息:

NameError:未定义全局名称"x"

错误信息对我来说似乎也是错误的.

请注意,以下两个非常相似的代码片段可以正常工作:

# this works fine:
class C:
    x = {2 : 1}
    y = [w for w in x if x[w]==1]


# this works fine too:
x = {2 : 1}
y = {w for w in x if x[w]==1}
Run Code Online (Sandbox Code Playgroud)

python list-comprehension scoping dictionary-comprehension

12
推荐指数
0
解决办法
145
查看次数

范围函数适用于/ with/run/also/let:名称来自哪里?

有相当多的博客文章(像这样)的标准库的用途功能apply/ with/ run/ also/ let可用,使它更容易一点distingish时实际使用的这那些漂亮的功能.

几个星期以来,官方文档甚至最终提供了关于该主题的指导:https://kotlinlang.org/docs/reference/coding-conventions.html#using-scope-functions-applywithrunalsolet

不过,我认为这是相当困难的记忆功能的个人使用的情况下,函数名.我的意思是,对我来说,它们似乎是可以互换的,为什么不let被称为run例如?

有什么建议?我认为这些名字不是很有表现力,这使得一开始很难看出差异.

lambda scoping higher-order-functions kotlin

12
推荐指数
3
解决办法
837
查看次数

我什么时候应该打开和关闭MongoDB连接?

我对MongoDB和NoSQL很新,我刚刚开始使用MongoDB/Norm/ASP.NET MVC 3构建一个站点.

我想知道我应该如何确定与Mongo数据库的连接.

现在我有一个Basecontroller,它实现了MongoSession和onActionExecuted我处理它所以我所有的派生控制器都可以访问我的MongoSession.MongoSession类在其构造函数中打开一个连接,并将它放在Dispose()上,就像它今天的工作方式一样.

private IMongo _mongo;

public MongoSession()
{         
    _mongo = Mongo.Create("connString");      
} 

public void Dispose()
{
    _mongo.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

如果我在控制器中做其他事情,我有点担心它可能会持续打开太长时间.

这种方法是否应该不会冒太多连接的风险,或者我应该做更像下面的示例方法?

   public void Add<T>(T item) where T : class, new()
   {
       using (var mongo = Mongo.Create("connString"))
       {
         mongo.GetCollection<T>().Insert(item); 
       }
   }
Run Code Online (Sandbox Code Playgroud)

另一个跟进问题是:

通过Norm"昂贵"操作打开和关闭MongoDB连接?

database-connection scoping mongodb norm mongodb-.net-driver

11
推荐指数
1
解决办法
1万
查看次数

引用在函数范围内定义的类

在C++ 1y中,函数的返回类型可能涉及本地定义的类型:

auto foo(void) {
  class C {};
  return C();
}
Run Code Online (Sandbox Code Playgroud)

类名C不在主体范围之外foo,因此您可以创建类实例但不指定其类型:

auto x            = foo(); // Type not given explicitly
decltype(foo()) y = foo(); // Provides no more information than 'auto'
Run Code Online (Sandbox Code Playgroud)

有时需要明确指定类型.也就是说,编写"在foo中定义的类型C"而不是"foo返回的任何类型"是很有用的.有没有办法foo明确写出返回值的类型?

c++ scoping c++14

11
推荐指数
1
解决办法
192
查看次数

在VBA中确定了范围?

假设您在名为的模块中有此代码Module1:

Option Explicit

Private Type TSomething
    Foo As Integer
    Bar As Integer
End Type

Public Something As TSomething
Run Code Online (Sandbox Code Playgroud)

在等效的C#代码中,如果您创建了Something字段public,代码将不再编译,因为可访问不一致 - 字段的类型比字段本身更不易访问.这是有道理的.

但是在VBA中,您可以使用以下代码Module2:

Sub DoSomething()
    Module1.Something.Bar = 42
    Debug.Print Module1.Something.Bar
End Sub
Run Code Online (Sandbox Code Playgroud)

并且在键入时获得IntelliSense,它会编译,运行并输出42.

为什么?从COM的角度来看,它是如何工作的?它是语言规范的一部分吗?

com vba scoping

11
推荐指数
1
解决办法
130
查看次数

"我们的"或"使用变量"中的什么魔法满足"使用严格的qw(vars)"?

我有工作代码,但我试图理解为什么它的工作原理.我也想更多地了解Perl 5中(的内部perlbrew,perl-5.26.1,Cygwin x64).

我知道从perlvarstrictuse strict 'vars'作品由设置标志$^H.然后Perl ::根据这些标志测试对非变量的访问.不知怎的,既ouruse vars标记变量,使他们通过测试.他们是怎么做到的?

例如:

perl -E 'package Foo;
    use strict "vars";
    use vars qw($foo);
    say $foo;'
Run Code Online (Sandbox Code Playgroud)

运行正常(虽然它不产生输出).根据来源use vars,我尝试了这个,我认为会有同样的效果:

perl -E 'package Foo;
    use strict "vars";
    my $sym = "Foo::foo";          # <-- These two lines pulled straight
    *$sym = \$$sym;                # <-- from the source for the vars pragma
    say $foo;'
Run Code Online (Sandbox Code Playgroud)

但是,它给了我一个错误: …

perl packages scoping variable-declaration language-lawyer

11
推荐指数
1
解决办法
321
查看次数

curve3d找不到本地函数"fn"

我正在尝试使用-package中的curve3d函数emdbook来创建在另一个函数内部本地定义的函数的等高线图,如以下最小示例所示:

library(emdbook)
testcurve3d <- function(a) {
  fn <- function(x,y) {
    x*y*a
  }
  curve3d(fn(x,y))
}
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,这会产生错误

> testcurve3d(2)
 Error in fn(x, y) : could not find function "fn" 
Run Code Online (Sandbox Code Playgroud)

而相同的想法与-package 的更基本curve功能一起正常工作base:

testcurve <- function(a) {
  fn <- function(x) {
    x*a
  }
  curve(a*x)
}
testcurve(2)
Run Code Online (Sandbox Code Playgroud)

问题是如何curve3d重写它以使其表现如预期.

r scoping

11
推荐指数
1
解决办法
278
查看次数