标签: local-variables

动态地将模块中的方法添加到类的特定实例

这是交易:我需要用一些方法扩展class Box的特定实例.我需要包含实时内部模块的方法,我希望Box实例能够动态地包含模块.现在我使用带有eval的钩子:

class Box
  def after_initialize
    if self.injected_module.present?
      eval("class << self; include #{self.injected_module}; end")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

它工作得很好但是当我使用eval时我真的感觉很脏.我正在寻找类似的东西:

module_to_inject = self.injected_module
self.eigenclass.class_eval do
   include module_to_inject
end
Run Code Online (Sandbox Code Playgroud)

但是我无法让eigenclass在没有monkeypatching类的情况下运行class_eval:

class Box; def eigenclass; class << self; self; end end end
Run Code Online (Sandbox Code Playgroud)

有一种美丽(可靠)的方式让我这样做吗?

ruby singleton eval local-variables eigenclass

3
推荐指数
1
解决办法
766
查看次数

什么是在没有decorator @或@@的类定义中定义的变量?

在Ruby中,这样的代码是合法的:

class Aclass
  m = 1
end
Run Code Online (Sandbox Code Playgroud)

但从语义上讲,将会m是什么,以及如何访问它?

ruby class local-variables

3
推荐指数
1
解决办法
135
查看次数

将本地函数传递给setTimeout()

我写了以下功能.

function obj()
{
     this.a;
}
obj.prototype.catch = function()
{
    alert('Catched')
}
obj.prototype.do = function()
{
    alert('called');
}
Run Code Online (Sandbox Code Playgroud)

我需要的是,调用obj :: do()之后调用obj :: catch()并且必须从obj :: do()内部执行调用所以如何将obj的本地函数传递给setTimeout

我试过了

obj.prototype.do = function()
 { 
     window.setTimeout('"'+this.catch+'()"',1000);
     alert('called');
 }
Run Code Online (Sandbox Code Playgroud)

它不起作用然后我试过

 obj.prototype.do = function()
 { 
     window.setTimeout('"'+this+'.catch()"',1000);
     alert('called');
 }
Run Code Online (Sandbox Code Playgroud)

这给了我Chrome控制台上的以下错误

Uncaught SyntaxError: Unexpected token ILLEGAL
Run Code Online (Sandbox Code Playgroud)

所以我尝试了以下脏方法(它真的很脏吗?)

 obj.prototype.do = function()
 { 
     this.pid = randomVal(100);
     window['temp'+this.pid] = this;
     window.setTimeout("temp"+this.pid+".catch();",1000);
     alert('called');
 }
 function randomVal(bound)//returns a random number between 0 and <bound>
 {
       return (Math.floor(Math.random()*(bound)));
 }
Run Code Online (Sandbox Code Playgroud)

那很有效.

那么为什么前两个方法没有用呢.有没有其他方法可以做同样的事情没有全局变量..第二种方法和最后一种方法几乎相似.但为什么我在第二种方法中得到错误..?工作代码可以在这里找到 http://jsfiddle.net/jXhAs/

javascript local-variables settimeout

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

将局部变量传递给线程.可能吗?

我正在研究gcc,我想知道这是否可行:

我有一个函数(NOTmain但是aLocalFn),我在其中声明了一个局部变量.然后我将此局部参数作为线程参数传递.它可行吗?或者有机会(取决于先运行的是什么)在运行threadFunction之前aLocalVar会丢失,而引用idxPtr将指向无意义?

int *threadFunction(void *idxPtr){
    int rec_idx=(int) *idxPtr;

    //work in the thread with this variabel rec_idx
}

int aLocalFn(){
   int aLocalVar=returnsRecordIndex();

   pthread_create(&thread_id,&attr_detached,threadFunction, &aLocalVar)!=0)
   return 0;
}   
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

c multithreading arguments local-variables

3
推荐指数
1
解决办法
2822
查看次数

一个函数改变另一个函数的局部变量?

我遇到了一些JavaScript函数的问题,这些函数让我头疼了大约一个小时,直到一些精心设置的警报()显示出令我惊讶的东西.似乎有一个功能是改变另一个函数的局部变量.我写了一个简单的测试脚本:

function first() {
    msg = "1111";

    second();

    alert(msg);
    }


function second() {
    msg = "2222";
    }
Run Code Online (Sandbox Code Playgroud)

当我第一次打电话时()我希望得到一个警告框,上面写着"1111",但我得到的是"2222".second()如何影响属于first()的局部变量?我错过了什么或这是一个错误吗?

我正在使用Firefox 12.0.

javascript local-variables

3
推荐指数
1
解决办法
521
查看次数

在方法中放置局部变量声明的最佳实践?

C#最佳实践是在方法的顶部声明所有局部变量,还是在第一次使用时声明它们?

例1:

void myMethod()
{
    var example = String.Empty;
    var xmlDoc = new XmlDocument();

    xmlDoc.LoadXml("c:\my.xml");
    example = doc.SelectSingleNode("//TestNode").OuterXml;
}
Run Code Online (Sandbox Code Playgroud)

例2:

void myMethod()
{
    var xmlDoc = new XmlDocument();

    xmlDoc.LoadXml("c:\my.xml");
    var example = doc.SelectSingleNode("//TestNode").OuterXml;
}
Run Code Online (Sandbox Code Playgroud)

c# variables coding-style local-variables

3
推荐指数
1
解决办法
2923
查看次数

函数*实际*内的局部变量何时被分配

只是好奇这个.以下是相同功能的两个代码段:

void MyFunc1()
{
    int i = 10;
    object obj = null;

    if(something) return;
}
Run Code Online (Sandbox Code Playgroud)

而另一个是......

void MyFunc1()
{
    if(something) return;

    int i = 10;
    object obj = null;
}
Run Code Online (Sandbox Code Playgroud)

现在第二个有没有在某些事情是真的时分配变量的好处?或者,一旦调用函数并且将return语句移到顶部没有效果,总是会分配本地堆栈变量(在当前作用域中)?

dotnetperls.com文章的链接说:"当你在C#程序中调用一个方法时,运行时会分配一个单独的内存区域来存储所有局部变量槽.即使你不访问变量,这个内存也会在堆栈上分配.函数调用."

更新
下面是这两个函数的IL代码的比较.Func2指的是第二次剪断.似乎两个案例中的变量都是在开头分配的,但是在Func2()的情况下,它们稍后会被初始化.所以我猜这样没有任何好处.

ILDisassembler中的ILCode

.net c# stack memory-management local-variables

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

Ocaml - 全局vs局部变量

我想创建一个名为result的全局变量,它使用5个字符串连接来创建一个包含字符串start的9倍的字符串,用逗号分隔.我有两段代码,只有第二段代码声明了一个全局变量.由于某种原因,它不能轻易地在我的大脑中注册......难道只是因为我使用了一个let in,所以第一段代码的结果是一个局部变量?有更详细的解释吗?

let start = "ab";;

let result = start ^ "," in
  let result = result ^ result in
  let result = result ^ result in
  let result = result ^ result in
  let result = result ^ start in 
  result;;
- : string = "ab,ab,ab,ab,ab,ab,ab,ab,ab"

let result = 
  let result = start ^ "," in
  let result = result ^ result in
  let result = result ^ result in
  let result = result ^ result in
  let result …
Run Code Online (Sandbox Code Playgroud)

ocaml global-variables local-variables

3
推荐指数
1
解决办法
1109
查看次数

如何将locals()中的值赋给具有相同名称的局部变量?

这有效:

def foo():
    locals().update({'bar': 12})
    print(locals()['bar'])  # 12
Run Code Online (Sandbox Code Playgroud)

这失败了:

def foo():
    locals().update({'bar': 12})
    bar = locals()['bar']  # KeyError: 'bar'
    print(bar)
Run Code Online (Sandbox Code Playgroud)

python local-variables

3
推荐指数
1
解决办法
95
查看次数

如何在表的键中分配多个值?

我正在尝试为表中的一个变量分配多个值。一个用于字符串名称,另一个用于整数。该代码将去:

items = {
potion = "Potion", 100
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何正式编写此代码,以及如何调用这些特定值。(你这样称呼吗?)

io.write(item.potion.1) --> Potion
io.write(item.potion.2) --> 100
Run Code Online (Sandbox Code Playgroud)

(或者是其他东西?)

请帮忙。:一世

arrays lua local-variables

3
推荐指数
1
解决办法
53
查看次数