标签: scope

不明白为什么会发生UnboundLocalError

我在这做错了什么?

counter = 0

def increment():
  counter += 1

increment()
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出了一个UnboundLocalError.

python scope global-variables

153
推荐指数
5
解决办法
18万
查看次数

从类定义中的列表推导中访问类变量

如何从类定义中的列表推导中访问其他类变量?以下适用于Python 2但在Python 3中失败:

class Foo:
    x = 5
    y = [x for i in range(1)]
Run Code Online (Sandbox Code Playgroud)

Python 3.2给出了错误:

NameError: global name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)

尝试Foo.x也不起作用.有关如何在Python 3中执行此操作的任何想法?

一个稍微复杂的激励示例:

from collections import namedtuple
class StateDatabase:
    State = namedtuple('State', ['name', 'capital'])
    db = [State(*args) for args in [
        ['Alabama', 'Montgomery'],
        ['Alaska', 'Juneau'],
        # ...
    ]]
Run Code Online (Sandbox Code Playgroud)

在这个例子中,apply()本来是一个不错的解决方法,但它遗憾地从Python 3中删除.

python scope list-comprehension python-3.x python-internals

152
推荐指数
3
解决办法
2万
查看次数

成员函数中的静态变量

有人可以解释成员函数中的静态变量如何在C++中工作.

鉴于以下课程:

class A {
   void foo() {
      static int i;
      i++;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我声明了多个实例A,那么调用foo()一个实例会增加i所有实例上的静态变量吗?或者只是它被召唤的那个?

我假设每个实例都有自己的副本i,但是通过一些代码,我似乎另有说明.

c++ static scope

151
推荐指数
3
解决办法
8万
查看次数

我可以从其他文件中访问变量吗?

是否可以在first.js名为second.js?的另一个文件中调用的文件中使用变量?

first.js包含一个名为的变量colorcodes.

javascript scope

148
推荐指数
5
解决办法
28万
查看次数

ngRepeat - 限制显示结果的数量

我是一个巨大的AngularJS n00b,我甚至发现教程很难理解.本教程将引导我构建一个显示电话的应用程序.我在第5步,我认为这是一个实验,我试图让用户指定他们想要显示多少.该视图如下所示:

<body ng-controller="PhoneListCtrl">

  <div class="container-fluid">
    <div class="row-fluid">
      <div class="span2">
        <!--Sidebar content-->

        Search: <input ng-model="query">
        How Many: <input ng-model="quantity">
        Sort by:
        <select ng-model="orderProp">
          <option value="name">Alphabetical</option>
          <option value="age">Newest</option>
        </select>

      </div>
      <div class="span10">
        <!--Body content-->

        <ul class="phones">
          <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
            {{phone.name}}
            <p>{{phone.snippet}}</p>
          </li>
        </ul>

      </div>
    </div>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

我添加了这一行,用户可以输入他们想要显示的结果数量:

How Many: <input ng-model="quantity">
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

function PhoneListCtrl($scope, $http) {
  $http.get('phones/phones.json').success(function(data) {
    $scope.phones = data.splice(0, 'quantity');
  });

  $scope.orderProp = 'age';
  $scope.quantity = 5;
}
Run Code Online (Sandbox Code Playgroud)

重要的是: …

javascript model-view-controller scope angularjs

147
推荐指数
2
解决办法
19万
查看次数

在Rails 4风格中使用lambda和参数的范围?

我想知道如何在Rails 4中完成以下操作,或者我是否只使用Rails 3方法来使用lambda,它可以以与4相同的方式传递参数.

我对Rails 3很新,并尝试使用运行Rails 4的一些示例.

这是我的Rails 3代码:

class Person < ActiveRecord::Base
  scope :find_lazy, lambda {|id| where(:id => id)}
end

# In console I can call
Person.find_lazy(1)
Run Code Online (Sandbox Code Playgroud)

所以,如果这是Rails 4方式是使用 - > {},那是一个lambda,对吧?scope :all_lazy, -> { select("*") }如果我需要一个论点怎么办?我尝试了一些不同的想法,并在使用 - > {}时在控制台中获得参数错误.

scope ruby-on-rails-4 rails-activerecord

141
推荐指数
4
解决办法
9万
查看次数

在类中声明枚举

在下面的代码片段中,Color枚举是在Car类中声明的,以便限制枚举的范围并尽量不"污染"全局命名空间.

class Car
{
public:

   enum Color
   {
      RED,
      BLUE,
      WHITE
   };

   void SetColor( Car::Color color )
   {
      _color = color;
   }

   Car::Color GetColor() const
   {
      return _color;
   }

private:

   Car::Color _color;

};
Run Code Online (Sandbox Code Playgroud)

(1)这是限制Color枚举范围的好方法吗?或者,我应该在Car类之外声明它,但可能在它自己的命名空间或结构中声明它?我今天刚刚看到这篇文章,主张后者并讨论关于枚举的一些好点:http: //gamesfromwithin.com/stupid-c-tr​​icks-2-better-enums.

(2)在这个例子中,当类中工作时,最好是将枚举编码为Car::Color,还是只需要Color?(我假设前者更好,以防万一Color在全局命名空间中声明了另一个枚举.这样,至少,我们明确指出我们所指的枚举.)

c++ enums scope namespaces class

140
推荐指数
4
解决办法
23万
查看次数

轻松设置"this"变量?

我对Javascript有很好的理解,除了我找不到设置"this"变量的好方法.考虑:

var myFunction = function(){
    alert(this.foo_variable);
}

var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts

var old_fn = someObj.fn;   //store old value
someObj.fn = myFunction;   //bind to someObj so "this" keyword works
someObj.fn();              
someObj.fn = old_fn;       //restore old value
Run Code Online (Sandbox Code Playgroud)

没有最后4行,有没有办法做到这一点?这很烦人......我试过绑定一个匿名函数,我觉得这个函数漂亮而聪明,但无济于事:

var myFunction = function(){
    alert(this.foo_variable);
}

var someObj = document.body;        //using body as example object
someObj.foo_variable = "hi";        //set foo_variable so it alerts
someObj.(function(){ fn(); })();    //fail.
Run Code Online (Sandbox Code Playgroud)

显然,将变量传递给myFunction是一个选项......但这不是这个问题的重点.

谢谢.

javascript variables scope this

138
推荐指数
3
解决办法
6万
查看次数

在for循环中声明的变量是局部变量?

我一直在使用C#很长时间但从未意识到以下情况:

 public static void Main()
 {
     for (int i = 0; i < 5; i++)
     {

     }

     int i = 4;  //cannot declare as 'i' is declared in child scope                
     int A = i;  //cannot assign as 'i' does not exist in this context
 }
Run Code Online (Sandbox Code Playgroud)

那么,为什么我不能在for块之外使用'i'的值,如果它不允许我声明一个带有这个名字的变量?

我认为for循环使用的迭代器变量仅在其范围内有效.

c# variables scope

134
推荐指数
6
解决办法
7238
查看次数

为什么在"catch"或"finally"范围内的"try"中没有声明变量?

在C#和Java(以及可能的其他语言)中,在"try"块中声明的变量不在相应的"catch"或"finally"块的范围内.例如,以下代码无法编译:

try {
  String s = "test";
  // (more code...)
}
catch {
  Console.Out.WriteLine(s);  //Java fans: think "System.out.println" here instead
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,catch块中对s的引用发生编译时错误,因为s仅在try块的范围内.(在Java中,编译错误是"s无法解决";在C#中,它是"当前上下文中不存在名称".)

这个问题的一般解决方案似乎是在try块之前而不是try块中声明变量:

String s;
try {
  s = "test";
  // (more code...)
}
catch {
  Console.Out.WriteLine(s);  //Java fans: think "System.out.println" here instead
}
Run Code Online (Sandbox Code Playgroud)

然而,至少在我看来,(1)这感觉就像一个笨重的解决方案,并且(2)它导致变量具有比程序员预期更大的范围(方法的整个剩余部分,而不仅仅是在的try-catch-最后).

我的问题是,这种语言设计决策背后的原理是什么(在Java中,在C#中,和/或在任何其他适用的语言中)?

c# java scope language-design exception

130
推荐指数
8
解决办法
6万
查看次数