问题标签 [tie]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
159 浏览

perl - 在 perl 中使用 tie::file 时得到一个空数组

我尝试在 perl 中使用 Tie::File 通过编写一小段代码来访问文件。但是,我通过运行下面的代码得到的“T_array”似乎是空的:

它的输出为 0,表示数组为空。“QtermsSorted.txt”是Linux下perl生成的。首先,我虽然可能是文件编码问题,但我尝试使用“iconv -t utf8 QtermsSorted.txt”来更改编码,但没有奏效。但是,当我使用在 Windows 8 中创建的 txt 文件时,输出大小是正确的。我想知道你是否可以告诉我出了什么问题以及如何解决它。先感谢您。

0 投票
1 回答
88 浏览

r - 创建捕获组最频繁出现的变量时如何标记关系?

在以下示例中,当我想确定组内最频繁的值时,如何要求 R 将平局识别为“平局”?

我基本上是从上一个问题开始的,它使用了 which.max 或 which.is.max 和一个自定义函数(创建一个按组捕获最频繁出现的变量),但我想承认这些关系是一个关系。有任何想法吗?

我想创建第三个变量 freq ,它包含 v1 中按 id 最常见的观察,但也创建了标识为“tie”的关系。

根据之前的答案,此代码可用于创建 freq 变量,但不处理关系:

0 投票
1 回答
169 浏览

perl - 两次评估只读变量时的不同结果

我注意到使用Readonly模块声明的变量,多次评估一个变量会产生不同的结果。

这是为什么?似乎第一次用字符串解释变量,第二次用数字上下文解释变量。我的猜测是,如果它是数字,Math::BigInteger模块将重载'*'运算符,产生准确的结果。这是Readonly模块中的错误吗,有什么办法可以避免吗?

我使用 perl 5.10 和 Readonly 1.03 没有Readonly::XS.

我可以用

  • v5.10.0MSWin32-x86-multi-thread(ActivePerl)
  • v5.10.0在 Linux 上x86_64-linux-thread-multi
  • v5.12.0在 Windows 上 (ActivePerl)

v5.14.2但是, (ActivePerl)不会发生这种情况。

我还用 Readonly 1.04 复制了它。我不太确定这是否相关,但Scalar::Util::looks_like_number行为类似:

0 投票
2 回答
1163 浏览

c++ - 我们可以与 c++1y std::tie() 类似的函数进行深度绑定吗?

有没有办法std::tie在 c++11/1y 中编写一个与元组密切相关的变体。也就是说,其中一个 tie((x,y),z) = make_tuple(make_tuple(1,2),3)绑定x, y, z1, 2 and 3,分别如下例所示。这会很好。谢谢。

0 投票
1 回答
555 浏览

c++ - 是否可以在 c++11 中扩展 std::tie 以接受占位符?

我想知道是否可以编写一个类似std::tie()- 的函数(使用模板编程),它只能绑定元组的选择组件,并将其他组件绑定到一些占位符,例如std::bind(). 如果是这样,只需要为他/她感兴趣的部分声明变量。

例如,

0 投票
2 回答
8620 浏览

c++ - 使用 std::tie 作为循环目标的范围

我想做如下的事情:

但是,这不是有效代码,因为正如标准所说,基于范围的 for 循环被定义为等效于:

其中 for-range-declaration 定义为:

for-range-declaration:attribute-specifier-seq_{opt} decl-specifier-seq 声明符

那么让我退缩的是 decl-specifier-seq 没有​​标记为可选?

因此,似乎我必须为这个循环使用旧样式的循环:

但它在语法上似乎有点混乱,因为直觉上似乎是一个相当常见的任务,解包函数调用的结果,这在许多其他上下文中都是有效的。

有没有建议在语言中添加一些东西?这甚至是合理的想法吗?有没有更好的方法来做到这一点,我忽略了?我误读了标准吗?

显然,我可以组合我自己的函数来执行此操作,但使用起来也有点混乱。

0 投票
2 回答
833 浏览

database - Perl:在磁盘上存储巨大的哈希有问题吗?

我正在从事一个 Perl 项目,该项目涉及使用大约 1700 万个键构建散列。这太大了,无法存储在内存中(我的笔记本电脑的内存只能保存大约 1000 万个键)。我知道解决方案是将数据存储在磁盘上,但在实践中我无法执行此操作。这是我尝试过的:

数据库文件

这给了我一个分段错误:循环中的 11 部分,原因我不明白。

伯克利数据库

这似乎对大约前 1500 万个键很有效,但随后会显着减慢并最终在循环结束时完全冻结。我不认为这是一个内存问题。如果我将循环分成四部分,将它们放在四个单独的程序中,然后按顺序运行它们(每次向数据库添加约 400 万条记录),前三个成功完成,但第四个在数据库大约有 15 条时挂起万把钥匙。所以看起来 BerkeleyDB 可能只能处理大约 1500 万个哈希键???

DBM::深

从初步测试来看,这似乎工作正常,但它真的很慢:每千个键大约 5 秒,或者运行整个循环约 22 小时。如果可能的话,我宁愿避免这种情况。

I'd be very grateful for suggestions on troubleshooting one of these packages, or ideas about other options for accomplishing the same thing.

UPDATE

0 投票
1 回答
62 浏览

perl - 使用 BerkelyDB 将绑定哈希传递给子例程

我正在尝试将使用 BerkeleyDB 的绑定哈希传递给子例程并在例程中修改数据库的内容,但它不起作用。

但是当我运行它时:

所以看起来我可以从数据库中读取,但我不能写入它。为什么?

我尝试在子例程结束时执行 db_sync() ,但没有任何区别。

这是使用 BerkeleyDB 0.54 版的 Perl 5.14。它反过来使用 Berkeley DB 版本 6,创建版本 9 哈希表。

0 投票
1 回答
226 浏览

perl - 使用“each”进行迭代时从 DB_File 绑定哈希中删除项目不安全?

问题

我正在使用 NetBSD 6.1、Perl v5.18.1 和 DB_File v1.818。each如果我使用并从哈希中删除每个项目来遍历与 DB_File 相关的哈希,则并非所有项目都被删除。这是一个演示问题的脚本:

当我运行它时,10 条记录中有 4 条(有时是 5 条)没有被删除:

如果我在 Linux(Ubuntu 14.04)系统上运行脚本,那么它总是可以工作(所有记录都已删除)。

如果我切换到foreach按键循环,那么它可以在 NetBSD 和 Linux 上运行:

文档说什么

我无法找到任何明确说明在迭代时删除each并不总是有效的东西。

这是我能够找到的:

  • 文档foreach说:

    foreach如果 VAR 是一个并列或其他特殊变量,可能不会做你期望的事情。

    我不确定这是什么意思,但奇怪的foreach是它在哪里起作用

  • 文档each说:

    任何插入到散列中的操作都可能会更改顺序,任何删除操作也会更改顺序,但最近的键返回eachkeys可能会在不更改顺序的情况下被删除。

    对我来说,这意味着delete在迭代时对当前条目是安全的。

  • 文档DB_File在迭代时没有提到删除。

问题

是不是这个问题:

  • NetBSD 的 Berkeley DB 实现中的错误引起的?
  • 由 DB_File 中的错误引起的?
  • 的已知限制each
  • 绑定哈希的已知限制?
  • DB_File 绑定哈希的已知限制?

为什么foreach在按键不起作用时起作用each

0 投票
1 回答
139 浏览

perl - Tie::File::AsHash 疑难解答

我正在尝试使用 Perls 的 Tie::File::AsHash 将大文件加载到哈希中。但是,它似乎得到了键而不是值。代码是

我正在对其进行测试的文件仅包含一行,最后一个数字后有一个制表符:

ENSMUSG00000020333|ENSMUST00000000145|54361198|54361535 AGAACGTTGCGGGGCGGGCGGCCCAGCCCCTCCCCCAGTCGGGCTCGGCAGTTCGGATGCCGCTAGATTGCTCTCTCACTTCTGGAGAAGATGCAGACCCAGGAGATCCTGAGGATCCTGCGGCTGCCCGAGCTATCGGACTTGGGCCAGTTTTTCCGCAGCCTCTCAGCTACCACCCTCGACGGTGGTGGAGCCCGGCGATCTGTGATTGGGGGTTGCACT

当我运行它时,我得到:在 ./test_hashes.pl 第 8 行第 2 行的连接 (.) 或字符串中使用未初始化的值。

有什么建议吗?提前致谢