小编Fac*_*sco的帖子

如何在Delphi中获取当前过程/函数的名称(作为字符串)

是否可以在过程/函数中获取当前过程/函数的名称作为字符串?我想在编译时会有一些"宏"扩展.

我的情况是这样的:我有很多程序被给予记录,他们都需要从检查记录的有效性开始,因此他们将记录传递给"验证程序".如果记录无效,验证程序(所有程序都是同一个程序)会引发异常,并且我希望异常的消息不包括验证程序的名称,而是包含调用验证程序的函数/过程的名称程序(自然地).

就是,我有

procedure ValidateStruct(const Struct: TMyStruct; const Sender: string);
begin
 if <StructIsInvalid> then
    raise Exception.Create(Sender + ': Structure is invalid.');
end;
Run Code Online (Sandbox Code Playgroud)

然后

procedure SomeProc1(const Struct: TMyStruct);
begin
  ValidateStruct(Struct, 'SomeProc1');
  ...
end;

...

procedure SomeProcN(const Struct: TMyStruct);
begin
  ValidateStruct(Struct, 'SomeProcN');
  ...
end;
Run Code Online (Sandbox Code Playgroud)

如果我可以写出类似的内容,那么它会更容易出错

procedure SomeProc1(const Struct: TMyStruct);
begin
  ValidateStruct(Struct, {$PROCNAME});
  ...
end;

...

procedure SomeProcN(const Struct: TMyStruct);
begin
  ValidateStruct(Struct, {$PROCNAME});
  ...
end;
Run Code Online (Sandbox Code Playgroud)

然后每次编译器遇到{$ PROCNAME}时,它只是将当前函数/过程的名称替换为"宏"作为字符串文字.

更新

第一种方法的问题在于它容易出错.例如,由于复制粘贴,你很容易弄错:

  procedure SomeProc3(const Struct: TMyStruct);
  begin
    ValidateStruct(Struct, 'SomeProc1');
    ...
  end;
Run Code Online (Sandbox Code Playgroud)

或错别字:

procedure SomeProc3(const Struct: TMyStruct); …
Run Code Online (Sandbox Code Playgroud)

delphi procedure compile-time

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

jquery:按类名获取元素并为每个元素添加css

我有一定数量的div框,它们都有相同的类名.我试图向他们申请一些东西,但没有运气.我到目前为止构建的代码是

$(document).ready(function(){
    elements = $('div.easy_editor');
    elements.each(function() { $(this).css("border","9px solid red"); });
    //elements[0].css("border","9px solid red");
});
Run Code Online (Sandbox Code Playgroud)

你能告诉我我做错了吗?

jquery class

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

带有JavaScript的HTML表单输入标记名称元素数组

这是一个两部分问题.有一天有人回答了类似的问题(其中也包含有关PHP中此类数组的信息),但我找不到它.

1.)首先,在表单中输入标记的name元素末尾创建的数组的正确术语是什么?

<form>

    <input name="p_id[]" value="0"/>
    <input name="p_id[]" value="1"/>
    <input name="p_id[]" value="2"/>

</form>
Run Code Online (Sandbox Code Playgroud)

2.)如何使用JavaScript从该数组中获取信息?具体来说,我现在只想计算数组的元素.这是我做的,但它不起作用.

function form_check(){
    for(var i = 0; i < count(document.form.p_id[]); i++){  //Error on this line

        if (document.form.p_name[i].value == ''){
            window.alert('Name Message');
            document.form.p_name[i].focus();
            break;
        }

        else{
            if (document.form.p_price[i].value == ''){
                window.alert('Price Message');
                document.form.p_price[i].focus();
                break;
            }

            else{
                update_confirmation();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

html javascript forms input

21
推荐指数
2
解决办法
16万
查看次数

为什么Objective-C使用YES/NO宏约定而不是true/false?

大多数语言都使用true/false关键字作为布尔值.我发现即使是Smalltalk也在使用true/false.我知道Objective-C只是借用Smalltalk的概念,而不是语言本身,但我很好奇为什么它使用YES/NO而不是更广泛使用true/false.有历史原因吗?

convention boolean objective-c naming-conventions

18
推荐指数
2
解决办法
4444
查看次数

名为i的变量是不可接受的吗?

就变量命名约定而言,是应该命名迭代器i还是更像语义的东西count?如果你不使用i,为什么不呢?如果您认为这i是可以接受的,是否存在不应该使用迭代的情况?

variables iterator coding-style naming-conventions

17
推荐指数
4
解决办法
1221
查看次数

Objective-C中函数名之前的"+"和" - "之间的区别

在Objective-C程序中的函数名称接口声明之前,"+"和" - "之间有什么区别.例:

- (void)continueSpeaking;

+ (NSArray *)availableVoices;
Run Code Online (Sandbox Code Playgroud)

有什么不同?

syntax function objective-c

17
推荐指数
1
解决办法
7048
查看次数

在Bash退出之前运行脚本

每次关闭Bash会话时我都想运行一个脚本.

我使用XFCE和终端0.4.5(Xfce终端仿真器),我想在每次关闭终端中的一个选项卡时运行一个脚本,包括最后一个(当我关闭终端时).

像.bashrc之类的东西,但在每个会话结束时运行.

.bash_logout不起作用

bash xfce exit

17
推荐指数
2
解决办法
6311
查看次数

记录当前函数名称

我有一些自定义日志功能是扩展的cat.一个基本的例子是这样的:

catt<-function(..., file = "", sep = " ", fill = FALSE, labels = NULL,
    append = FALSE)
{
    cat(..., format(Sys.time(), "(%Y-%m-%d %H:%M:%S)"), "\n", file = file, 
        sep = sep, fill = fill, labels = labels, append = append)
}
Run Code Online (Sandbox Code Playgroud)

现在,我使用(自制)函数进行了大量工作,并使用其中一些logfuntions来查看进度,这非常有效.但是,我注意到,我几乎总是使用这样的函数:

somefunc<-function(blabla)
{
  catt("somefunc: start")
  #do some very useful stuff here
  catt("somefunc: some time later")
  #even more useful stuff
  catt("somefunc: the end")
}
Run Code Online (Sandbox Code Playgroud)

注意每个调用如何catt从调用它的函数的名称开始.非常整洁,直到我开始重构我的代码并重命名函数等.

感谢Brian Ripley的一些旧的R-list帖子,如果我没弄错的话,我发现这段代码可以获得'当前的函数名':

catw<-function(..., file = "", sep = " ", fill = …
Run Code Online (Sandbox Code Playgroud)

logging r function

16
推荐指数
1
解决办法
2250
查看次数

为什么缩短C名称?

为什么有一个被调用的函数strcat而不是一个被调用的函数stringConcatenation,或者stringConcat或者string_concat类似的函数?为什么有一个clrscr功能,而不是clearScreenclear_screen

它是否与过去几天的源代码大小有关,其中每个字节在过大的软盘上都是值得的?还是程序员固有的懒惰加剧了这种情况?这是一个惯例吗?

c conventions function naming-conventions

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

Python:使用用户输入作为类名的类工厂

我想动态地将类atttributes添加到超类.此外,我想创建动态继承自这个超类的类,这些子类的名称应该取决于用户输入.

有一个超类"单元",我可以在运行时添加属性.这已经有效了.

def add_attr (cls, name, value):
    setattr(cls, name, value)

class Unit(object):
    pass

class Archer(Unit):
    pass

myArcher = Archer()
add_attr(Unit, 'strength', 5)
print "Strenght ofmyarcher: " + str(myArcher.strength)
Unit.strength = 2
print "Strenght ofmyarcher: " + str(myArcher.strength)
Run Code Online (Sandbox Code Playgroud)

这导致了期望的输出:
肌肉的强度:5个
强度的肌肉:2

但是现在我不想预定义子类Archer,但我宁愿让用户决定如何调用这个子类.我尝试过这样的事情:

class Meta(type, subclassname):
    def __new__(cls, subclassname, bases, dct):
    return type.__new__(cls, subclassname, Unit, dct)

factory = Meta()    
factory.__new__("Soldier")  
Run Code Online (Sandbox Code Playgroud)

但没有运气.我想我还没有真正理解这里的功能.我想要的结果是

class Soldier(Unit):
    pass
Run Code Online (Sandbox Code Playgroud)

由工厂创建.如果我用"Knight"这个参数调用工厂,我会想要创建一个类Knight,Unit的子类.

有任何想法吗?提前谢谢了!
再见 -
萨诺

python factory metaprogramming metaclass

11
推荐指数
2
解决办法
4719
查看次数