标签: scope

Bash变量范围

请解释为什么最后一个"回声"声明是空白的?我希望它在while循环中增加到值1:

#!/bin/bash
OUTPUT="name1 ip ip status" # normally output of another command with multi line output

if [ -z "$OUTPUT" ]
then
        echo "Status WARN: No messages from SMcli"
        exit $STATE_WARNING
else
        echo "$OUTPUT"|while read NAME IP1 IP2 STATUS
        do
                if [ "$STATUS" != "Optimal" ]
                then
                        echo "CRIT: $NAME - $STATUS"
                        echo $((++XCODE))
                else
                        echo "OK: $NAME - $STATUS"
                fi
        done
fi

echo $XCODE
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下语句而不是++ XCODE方法

XCODE=`expr $XCODE + 1`
Run Code Online (Sandbox Code Playgroud)

它也不会在while语句之外打印.我想我在这里缺少一些关于变量范围的东西,但是ol'手册页并没有显示给我.

bash scope pipe

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

嵌套函数中的局部变量

好吧,请耐心等待我,我知道这看起来会非常令人费解,但请帮助我了解发生了什么.

from functools import partial

class Cage(object):
    def __init__(self, animal):
        self.animal = animal

def gotimes(do_the_petting):
    do_the_petting()

def get_petters():
    for animal in ['cow', 'dog', 'cat']:
        cage = Cage(animal)

        def pet_function():
            print "Mary pets the " + cage.animal + "."

        yield (animal, partial(gotimes, pet_function))

funs = list(get_petters())

for name, f in funs:
    print name + ":", 
    f()
Run Code Online (Sandbox Code Playgroud)

得到:

cow: Mary pets the cat.
dog: Mary pets the cat.
cat: Mary pets the cat.
Run Code Online (Sandbox Code Playgroud)

所以基本上,为什么我没有得到三种不同的动物?是不是cage'打包'进入嵌套函数的局部范围?如果没有,对嵌套函数的调用如何查找局部变量?

我知道遇到这些问题通常意味着一个人"做错了",但我想了解会发生什么.

python closures scope nested-function

102
推荐指数
3
解决办法
9449
查看次数

如何在Javascript .filter()方法中将额外参数传递给回调函数?

我想比较一个Array中的每个字符串与给定的字符串.我目前的实施是:

function startsWith(element) {
    return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
Run Code Online (Sandbox Code Playgroud)

这个简单的函数有效,但只是因为现在将wordToCompare设置为全局变量,但我当然希望避免这种情况并将其作为参数传递.我的问题是我不知道如何定义startsWith()所以它接受一个额外的参数,因为我真的不明白它所采用的默认参数是如何传递的.我已经尝试了所有我能想到的不同方式,但没有一种方法可行.

如果您还可以解释传递参数如何"内置"回调函数(对不起,我不知道这些更好的术语)工作会很棒

javascript scope callback

99
推荐指数
5
解决办法
7万
查看次数

枚举类型的命名空间 - 最佳实践

通常,人们需要一起使用几种枚举类型.有时,一个人有一个名字冲突.我想到了两种解决方案:使用命名空间,或使用"更大"的枚举元素名称.仍然,命名空间解决方案有两种可能的实现:具有嵌套枚举的虚拟类或完整的命名空间.

我正在寻找这三种方法的优缺点.

例:

// oft seen hand-crafted name clash solution
enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd };
enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd };
void setPenColor( const eColors c ) {
    switch (c) {
        default: assert(false);
        break; case cRed: //...
        break; case cColorBlue: //...
        //...
    }
 }


// (ab)using a class as a namespace
class Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
class Feelings { enum e { cAngry, cBlue, cHappy, cEnd …
Run Code Online (Sandbox Code Playgroud)

c++ enums scope nested

98
推荐指数
7
解决办法
7万
查看次数

在AngularJs中设置动态范围变量 - 范围.<some_string>

我有一个字符串,我从一个routeParam或一个指令属性或其他什么,我想基于此在范围上创建一个变量.所以:

$scope.<the_string> = "something".
Run Code Online (Sandbox Code Playgroud)

但是,如果字符串包含一个或多个点,我想将其拆分并实际"向下钻取"到范围内.所以'foo.bar'应该成为$scope.foo.bar.这意味着简单版本将无法正常工作!

// This will not work as assigning variables like this will not "drill down"
// It will assign to a variables named the exact string, dots and all.
var the_string = 'life.meaning';
$scope[the_string] = 42;
console.log($scope.life.meaning);  // <-- Nope! This is undefined.
console.log($scope['life.meaning']);  // <-- It is in here instead!
Run Code Online (Sandbox Code Playgroud)

在根据字符串读取变量时,您可以通过执行此操作获得此行为$scope.$eval(the_string),但在分配值时如何执行此操作?

scope angularjs

96
推荐指数
4
解决办法
12万
查看次数

在Java交换机中声明和初始化变量

我有一个关于Java交换机的疯狂问题.

int key = 2;

switch (key) {
    case 1:
        int value = 1;
        break;
    case 2:
        value = 2;
        System.out.println(value);
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

场景1 - 当它key为2时,它成功地将值打印为2.
场景2 - 当我要在其中发表评论value = 2case 2:,说出该局部变量值可能尚未初始化.

问题:

场景1:如果执行流程没有进入case 1:(当时key = 2),那么它如何知道值变量的类型为int

场景2:如果编译器知道值变量的类型int,则必须访问.中的int value = 1;表达式case 1:.(声明和初始化).那么为什么sqawrk当我要评论value = 2case 2:,说本地变量值可能没有被初始化.

java scope initialization declaration switch-statement

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

在JavaScript原型函数中保留对"this"的引用

我刚刚开始使用原型JavaScript,并且我很难弄清楚this当范围发生变化时如何在原型函数内保留对主对象的引用.让我说明一下我的意思(我在这里使用jQuery):

MyClass = function() {
  this.element = $('#element');
  this.myValue = 'something';

  // some more code
}

MyClass.prototype.myfunc = function() {
  // at this point, "this" refers to the instance of MyClass

  this.element.click(function() {
    // at this point, "this" refers to the DOM element
    // but what if I want to access the original "this.myValue"?
  });
}

new MyClass();
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式执行此操作来保留对主对象的引用myfunc:

var myThis = this;
Run Code Online (Sandbox Code Playgroud)

然后使用myThis.myValue访问主对象的属性.但是当我有一大堆原型函数时会发生什么MyClass?我是否必须this在每个开头保存引用?似乎应该有一个更清洁的方式.这样的情况怎么样:

MyClass = function() {
  this.elements $('.elements'); …
Run Code Online (Sandbox Code Playgroud)

javascript oop scope this prototype-programming

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

使用匿名函数作为参数访问外部变量

基本上我使用这个方便的函数来处理数据库行(关注PDO和/或其他东西)

function fetch($query,$func) {
    $query = mysql_query($query);   
    while($r = mysql_fetch_assoc($query)) {
        $func($r);
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个功能,我可以简单地做到:

fetch("SELECT title FROM tbl", function($r){
   //> $r['title'] contains the title
});
Run Code Online (Sandbox Code Playgroud)

现在假设我需要$r['title']在var中连接所有内容(这只是一个例子).

我怎么能这样做?我在想这样的东西,但它不是很优雅:

$result = '';
fetch("SELECT title FROM tbl", function($r){
   global $result;
   $result .= $r['title'];
});

echo $result;
Run Code Online (Sandbox Code Playgroud)

php closures scope

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

Angularjs,在路线之间传递范围

我有一种形式可以延伸几页(可能不太理想,但就是这样).我希望在整个表单中有一个范围可以随着时间的推移填充,这样如果用户在步骤之间来回切换,则很容易记住状态.

所以我需要做非常伪代码:

  1. $scope.val = <Some dynamic data>
  2. 单击链接并路由到新模板(可能使用相同的控制器).
  3. $scope.val 应该仍然与最后一页上的值相同.

以某种方式持久化数据范围是正确的方法,还是有其他方法?您是否可以创建一个在路由之间具有持久范围的控制器,当然除了将其保存在数据库中之外.

scope routes controllers angularjs

88
推荐指数
3
解决办法
7万
查看次数

C#全局变量

我如何在C#中声明一个变量,以便每个类(*.cs)都可以访问其内容,而无需实例引用?

c# variables scope

88
推荐指数
4
解决办法
35万
查看次数