Language agnostic 什么是简单的一次完成技术?

Language agnostic 什么是简单的一次完成技术?,language-agnostic,Language Agnostic,无论函数执行多少次,只执行一次操作的简单技术是什么?有没有任何编程语言内置了特定的方法来处理这个比较常见的问题 示例:initialize()应仅在第一次执行时将全局_变量设置为true 一个C++示例(寻找好奇心的替代品——不是必需的): 初始h: int global_variable; void initialize(void); 初始c: static bool already_initialized = false; void initialize(void) { if (!

无论函数执行多少次,只执行一次操作的简单技术是什么?有没有任何编程语言内置了特定的方法来处理这个比较常见的问题

示例:initialize()应仅在第一次执行时将全局_变量设置为true

一个C++示例(寻找好奇心的替代品——不是必需的):

初始h:

int global_variable;
void initialize(void);
初始c:

static bool already_initialized = false;
void initialize(void)
{
    if (!already_initialized) 
    {
        already_initialized = true;
        global_variable = true;
    }
}

是的,一些语言(scala)确实支持它(使用lazy),但通常这个功能是由框架提供的,因为有一些折衷。有时您需要线程级别的阻塞同步。有时附带利益就足够了。有时您不需要同步,因为简单的单线程缓存就足够了。有时,您需要记住许多计算值,并且愿意忘记最近使用的值。等等可能这就是语言通常不支持这种模式的原因——这是框架的工作

是的,一些语言(scala)确实支持它(使用惰性),但通常这种功能是由框架提供的,因为有一些折衷。有时您需要线程级别的阻塞同步。有时附带利益就足够了。有时您不需要同步,因为简单的单线程缓存就足够了。有时,您需要记住许多计算值,并且愿意忘记最近使用的值。等等可能这就是语言通常不支持这种模式的原因——这是框架的工作

是的,一些语言(scala)确实支持它(使用惰性),但通常这种功能是由框架提供的,因为有一些折衷。有时您需要线程级别的阻塞同步。有时附带利益就足够了。有时您不需要同步,因为简单的单线程缓存就足够了。有时,您需要记住许多计算值,并且愿意忘记最近使用的值。等等可能这就是语言通常不支持这种模式的原因——这是框架的工作

是的,一些语言(scala)确实支持它(使用惰性),但通常这种功能是由框架提供的,因为有一些折衷。有时您需要线程级别的阻塞同步。有时附带利益就足够了。有时您不需要同步,因为简单的单线程缓存就足够了。有时,您需要记住许多计算值,并且愿意忘记最近使用的值。等等也许这就是语言通常不支持这种模式的原因——这是框架的工作

除了任何语言都可以使用的全局变量技术之外,还有其他几种方法可以做到这一点

在具有静态变量的语言中,为了防止全局范围内的变量名冲突,最好使用静态变量而不是全局变量

在某些语言中,您可以在运行时重新定义/重新声明函数,以便执行以下操作:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
在某些语言中,由于作用域问题(内部函数),无法在函数中重新声明函数,但仍可以将其他函数重新分配给现有函数。所以你可以这样做:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
有些语言(特别是声明性语言)实际上内置了一个“闩锁”功能,只执行一次。有时甚至还有重置功能。所以你可以这样做:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
如果语言允许,如果确实要重新执行该功能,可以重置
do_once
指令:

reset initialize;
initialize();

注意:上面类似C的语法显然是伪代码,并不代表任何真实语言,但所描述的特性确实存在于真实语言中。此外,除了HTML、XML和CSS之外,程序员很少遇到声明性语言,但图灵完整的声明性语言确实存在,通常用于硬件设计和“do_once”该功能通常编译为D触发器或锁存器。

除了在任何语言中都可以使用的全局变量技术外,还有其他几种方法可以做到这一点

在具有静态变量的语言中,为了防止全局范围内的变量名冲突,最好使用静态变量而不是全局变量

在某些语言中,您可以在运行时重新定义/重新声明函数,以便执行以下操作:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
在某些语言中,由于作用域问题(内部函数),无法在函数中重新声明函数,但仍可以将其他函数重新分配给现有函数。所以你可以这样做:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
有些语言(特别是声明性语言)实际上内置了一个“闩锁”功能,只执行一次。有时甚至还有重置功能。所以你可以这样做:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
如果语言允许,如果确实要重新执行该功能,可以重置
do_once
指令:

reset initialize;
initialize();

注意:上面类似C的语法显然是伪代码,并不代表任何真实语言,但所描述的特性确实存在于真实语言中。此外,除了HTML、XML和CSS之外,程序员很少遇到声明性语言,但图灵完整的声明性语言确实存在,通常用于硬件设计和“do_once”该功能通常编译为D触发器或锁存器。

除了在任何语言中都可以使用的全局变量技术外,还有其他几种方法可以做到这一点

在具有静态变量的语言中,为了防止全局范围内的变量名冲突,最好使用静态变量而不是全局变量

在某些语言中,您可以在运行时重新定义/重新声明函数,以便执行以下操作:

function initialize (void) {
    // do some stuff...

    function initialize(void) {}; // redefine function here to do nothing
}
function initialize (void) {
    // do some stuff ...

    initialize = function (void) {}; // assign no-op anonymous function
                                     // to this function
}
function do_once initialize (void) {
    // do some stuff
}
在某些语言中,由于作用域问题(内部函数),无法在函数中重新声明函数,但仍可以将其他函数重新分配给现有函数。所以你可以做som