小编Cla*_*dix的帖子

在软件开发过程中应何时开始使用版本控制?

这不是“为什么我应该使用版本控制”问题:-)

到目前为止,我一直在每个项目的第一行代码中使用版本控制。但是昨天我想到了一个问题(也许是一个愚蠢的问题),但我没有找到答案:版本控制在软件开发过程中何时真正开始?它应该像我一生一样从第一行代码开始,还是应该在您真正拥有代码的可操作版本时开始?换句话说:应在软件的第一个版本之前使用版本控制吗?(当然,我的意思是版本控制,而不是源备份!)。

version-control

5
推荐指数
1
解决办法
258
查看次数

Postgresql:检测哪个外键触发了"on before before"触发器

T是一个表有两列:ab,该参考文献,分别表AB.此类引用的类型为"delete cascade",因此如果从中删除行AB将其删除,则T也将删除与原始引用匹配的行.

现在,我想在"删除行之前"设置一个触发器T:是否有任何方法可以检测哪个引用触发了行删除T?换句话说:我知道,如果触发器是由级联触发AB

谢谢.

编辑

好的,我已经简化了问题.我有以下表格:

用户:

  • id:整数SERIAL主键
  • 名称:变化的字符(128)

验证链:

  • id:整数SERIAL主键
  • 名称:变化的字符(128)

validatorchainslinks:

  • chain:删除级联上的整数外键validatorchains.id
  • user:删除级联上的整数外键users.id
  • next:整数外键users.id on delete set null
  • prev:整数外键users.id on delete set null

我的"on before before"触发器的代码validatorchainslinks是:

BEGIN   
   UPDATE validatorchainslinks SET next = OLD.next WHERE next = OLD.user;
   UPDATE validatorchainslinks SET prev = OLD.prev WHERE prev = OLD.user;
   RETURN OLD; …
Run Code Online (Sandbox Code Playgroud)

postgresql

5
推荐指数
1
解决办法
606
查看次数

Lua C API:设置错误源信息

我正在实现一个简单的LUA在线解释器,它从纯文本(即C字符串)中获取多个LUA脚本并运行它们.一切正常,但现在我正在测试我的程序的响应,当这些脚本发生语法或运行时错误.

到目前为止,当发生错误时,在调用后lua_pcall我从栈中收到消息错误,如下所示:

[string "..."]:7: attempt to call field 'push' (a nil value)
Run Code Online (Sandbox Code Playgroud)

现在,我想要的是LUA的运行时用[string "..."]虚拟文件名替换令牌(记住解释器从字符串中获取LUA代码),这样如果用户使用名称"my.lua"提交虚拟脚本,那么错误消息从LUA的运行时为该脚本引发的格式为:

my.lua:7: attempt to call field 'push' (a nil value)
Run Code Online (Sandbox Code Playgroud)

我试图分析LUA的源代码,以了解LUA解释器如何成功实现此目的.到目前为止,我发现的是,lua_loadstring()并且lua_loadfile()不同之处在于后者将"@"前面的文件名称推入堆栈.来自LUA的源代码(lauxlib.c):

LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename,
                                         const char *mode) {
  LoadF lf;
  int status, readstatus;
  int c;
  int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */
  if (filename == NULL) {
    lua_pushliteral(L, "=stdin");
    lf.f = stdin;
  }
  else { …
Run Code Online (Sandbox Code Playgroud)

c lua c-api

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

是什么让 Lua 表的键顺序不确定?

我知道,在 Lua 中,表键不按创建顺序保存。到目前为止,我认为这是由于内部实现可能会不断重新排列树节点以提高性能。但是,我不明白为什么以下代码片段不会转储相同的结果,即使它是在独立运行中执行的(例如,lua每次运行都运行解释器):

-- Example script
local t = {a = 1, b = 2}
for k,v in pairs(t) do
  print(k,v)
end
Run Code Online (Sandbox Code Playgroud)

有时上面的代码会转储:

a   1
b   2
Run Code Online (Sandbox Code Playgroud)

或者:

b   2
a   1
Run Code Online (Sandbox Code Playgroud)

为什么用这么少的行(其中决定论似乎很明显),解释器会转储不同的结果?是什么让这里的键顺序随机?顺序是在表创建时还是表迭代时随机的?

谢谢你!

lua lua-table

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

::ffff:127.0.0.1 是本地主机吗?

我开始了解 IPv6 并且我读到可以使用::ffff:前缀将 IPv4 地址映射到 IPv6 。这使我想到地址是否::ffff:127.0.0.1是指localhost,所以我写了一个简单的C程序,用途getaddrinfo()IN6_IS_ADDR_LOOPBACK宏检查是否返回的地址是环回。

我已经用::1环回地址的其他变体测试了该程序,正如预期的那样,该程序说它是环回。但是,令我惊讶的是,当我尝试::ffff:127.0.0.1该程序时,它说不是!这怎么可能?我错过了什么吗?

这是我的程序源代码的简化版本:

struct addrinfo hints, *servinfo;
int rv;

memset(&hints, 0, sizeof(hints));

hints.ai_family = AF_UNSPEC; // IPv4 or IPv6
hints.ai_socktype = SOCK_STREAM;

/* hostname_or_ip is entered from the command line */
if ( (rv = getaddrinfo(hostname_or_ip, NULL, &hints, &servinfo)) != 0) {
    exit(1);
}

struct addrinfo *p = servinfo;
struct sockaddr_in6 *h = (struct sockaddr_in6 *) p->ai_addr;
int is_loopback = …
Run Code Online (Sandbox Code Playgroud)

linux network-programming loopback ipv6 getaddrinfo

2
推荐指数
1
解决办法
5391
查看次数

依赖注入 - 如何改进具有多个参数的构造函数

我是 Spring 的新手,最近注意到@Autowired不鼓励在类字段中使用。相反,建议使用构造函数进行依赖注入 (DI)。

问题是我定义了一个需要访问许多存储库的 bean。最初,该 bean 有几个自动装配的字段,保存对这些存储库的引用,但现在我只是删除了注释@Autowired并使用构造函数来初始化它们。结果是一个带有许多参数的构造函数,只要我创建更多存储库/服务,这些参数将来可能会增长:

@Bean
public Syncer syncer(SatBackendApplication.AppParamService appParamService,
                     CustomerRepository customerRepository,
                     AddressRepository addressRepository,
                     ContactPersonRepository contactPersonRepository,
                     CustomerContractRepository customerContractRepository,
                     ProductRepository productRepository,
                     OrderRepository orderRepository,
                     OrderRepository.OrderLineRepository orderLineRepository
                     ) {
    return new Syncer(
            appParamService,
            customerRepository,
            addressRepository,
            contactPersonRepository,
            customerContractRepository,
            productRepository,
            orderRepository,
            orderLineRepository);
}
Run Code Online (Sandbox Code Playgroud)

这是向 bean 注入依赖项的正确方法吗?有没有代码更少的替代解决方案?

java spring dependency-injection spring-boot

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

Ruby on Rails:在对象中缓存数据

我想出了一个我无法弄清楚如何解决的问题.我是Ruby和Rails的新手,确定有一种简单的方法来实现我正在寻找的东西.

这是show视图的ERB ,显示两条相等的线:

<p><%= @user.foo %></p>
<p><%= @user.foo %></p>
Run Code Online (Sandbox Code Playgroud)

想象一下,这foo是一种强烈的计算方法,所以我想缓存第一次调用的结果,以便在第二行中使用它而无需foo再次调用.最简单的选择是定义变量并缓存它:

<% foo_cache = @user.foo %>
<p><%= foo_cache %></p>
<p><%= foo_cache %></p>
Run Code Online (Sandbox Code Playgroud)

但我不想混淆"全球"范围.一个更好的方法是,foo它本身可以在第一次调用时保存它返回的值的缓存:

def foo
    return self.cached_foo if self.cached_foo  #WARNING: pseudocode here!
    #Not cached. Do stuff
    ...
    self.cached_foo = computed_value
    computed_value
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以动态地将数据附加到对象实例而不会干扰后面的模型(即没有制作save和公司函数处理这些附加数据).或者是否有另一种更好的方法来实现我正在寻找的东西?

谢谢.

ruby ruby-on-rails memoization

0
推荐指数
1
解决办法
458
查看次数