这是交易:我需要用一些方法扩展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中,这样的代码是合法的:
class Aclass
m = 1
end
Run Code Online (Sandbox Code Playgroud)
但从语义上讲,将会m是什么,以及如何访问它?
我写了以下功能.
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/
我正在研究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)
谢谢您的帮助
我遇到了一些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.
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) 只是好奇这个.以下是相同功能的两个代码段:
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()的情况下,它们稍后会被初始化.所以我猜这样没有任何好处.

我想创建一个名为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) 这有效:
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) 我正在尝试为表中的一个变量分配多个值。一个用于字符串名称,另一个用于整数。该代码将去:
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)
(或者是其他东西?)
请帮忙。:一世
local-variables ×10
c# ×2
javascript ×2
ruby ×2
.net ×1
arguments ×1
arrays ×1
c ×1
class ×1
coding-style ×1
eigenclass ×1
eval ×1
lua ×1
ocaml ×1
python ×1
settimeout ×1
singleton ×1
stack ×1
variables ×1