问题标签 [idioms]

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 投票
5 回答
3878 浏览

c# - “GetOrCreate”——这个成语有固定的名字吗?

好的,考虑一下我们大多数人多次使用的这个常见习语(我假设):

它有什么既定的名称吗?

(是的,它是用 C# 编写的,但它可以“轻松地”转移到 C++。因此有那个标签。)

0 投票
2 回答
137 浏览

algorithm - 多遍解析字符串的编程习惯

我正在开发一个盲文翻译库,我需要将一串文本翻译成盲文。我计划分多次执行此操作,但我需要一种方法来跟踪字符串的哪些部分已翻译,哪些未翻译,因此我不会重新翻译它们。

我总是可以创建一个类来跟踪已处理的字符串中的位置范围,然后设计我的搜索/替换算法以在后续传递中忽略它们,但我想知道是否没有更优雅的方法完成同样的事情。

我想多遍字符串翻译并不少见,我只是不确定这样做的选项是什么。

0 投票
4 回答
1590 浏览

java - 我应该尝试在 Java 中创建一个可逆枚举还是有更好的方法?

我似乎多次遇到过这个问题,我想问问社区我是否只是在找错树。基本上我的问题可以归结为:如果我有一个值很重要的枚举(在 Java 中),我应该使用枚举还是有更好的方法,如果我确实使用枚举,那么是反转查找的最佳方法吗?

这是一个例子。假设我想创建一个代表特定月份和年份的 bean。我可能会创建如下内容:

在这里,我将我的月份存储为一个名为 Month 的单独类,以便它是类型安全的。如果我只是输入 int,那么任何人都可以将 13 或 5,643 或 -100 作为数字传递,并且无法在编译时检查它。我限制他们放一个月,我将作为枚举实施:

现在假设我有一些我想写入的后端数据库,它只接受整数形式。那么执行此操作的标准方法似乎是:

相当简单,但是如果我想从数据库中读取这些值并写入它们会发生什么?我可以使用枚举中的 case 语句来实现一个静态函数,该语句接受一个 int 并返回相应的 Month 对象。但这意味着如果我改变了任何东西,那么我将不得不改变这个函数以及构造函数参数——在两个地方改变。这就是我一直在做的事情。首先,我创建了一个可逆地图类,如下所示:

然后我在我的枚举而不是构造函数方法中实现了这个:

现在这做了我想要的一切,但它看起来仍然是错误的。人们向我建议“如果枚举具有有意义的内部值,则应该改用常量”。但是,我不知道这种方法如何为我提供我正在寻找的类型安全性。不过,我开发的方式似乎过于复杂。有没有一些标准的方法来做这种事情?

PS:我知道政府增加新月份的可能性......不太可能,但请考虑更大的图景 - 枚举有很多用途。

0 投票
8 回答
555 浏览

python - 惯用的 Python has_one

我刚刚发明了一个愚蠢的小辅助函数:

因为我能想到的最易读/惯用的内联内容是:

...这对我来说很好,因为我知道 seq 很小,但感觉很奇怪。是否有一个我在这里忘记的习语阻止我不得不打破这个助手?

澄清

回想起来,这是一个很糟糕的问题,尽管我们得到了一些很好的答案!我一直在寻找:

  • 一个明显且可读的内联习语或 stdlib 函数,在这种情况下可以接受急切的评估。
  • 一个更明显和可读的辅助函数——因为它打破了一个完整的其他函数,所以只有最小的评估量似乎是可以接受的。

@Stephan202为辅助函数提出了一个非常酷的成语, @ Martin v. Löwis在谓词返回布尔值的假设下提出了一个更简单的内联成语。谢谢@大家的帮助!

0 投票
7 回答
5082 浏览

f# - F# 函数的多次退出

我可以在 C++ 中轻松地做到这一点(注意:我没有测试它的正确性——这只是为了说明我正在尝试做的事情):

但我无法弄清楚如何在 F# 中尽早退出例程。我想要做的是在输入错误时退出该功能,但如果输入正常则继续。我是否错过了 F# 的一些基本属性,还是因为我只是在学习 FP,所以我以错误的方式解决了这个问题?失败是我唯一的选择吗?

这就是我到目前为止所得到的,它可以编译:

有没有处理这种事情的 FP 方式?

0 投票
31 回答
275791 浏览

for-loop - 检测“for”循环中最后一个元素的pythonic方法是什么?

我想知道对 for 循环中的最后一个元素进行特殊处理的最佳方式(更紧凑和“pythonic”方式)。有一段代码应该只元素之间调用,在最后一个被禁止。

这是我目前的做法:

有没有更好的办法?

注意:我不想使用诸如使用reduce.;)

0 投票
6 回答
597 浏览

embedded - 如何保持时间没有累积误差?

考虑到您需要以秒为单位的时间的定点表示,并且您的滴答之间的时间不能以该定点格式精确表示,您如何在简单的嵌入式系统中跟踪时间?在这些情况下,您如何避免累积错误。

这个问题是对 slashdot上这篇文章的回应。

0.1 秒不能整齐地表示为二进制定点数,就像 1/3 不能整齐地表示为十进制定点数一样。任何二进制定点表示都有一个小错误。例如,如果该点后面有 8 个二进制位(即使用 256 缩放的整数值),则 256 的 0.1 乘以 25.6,将四舍五入为 25 或 26,导致 -2.3% 量级的误差或分别为 +1.6%。在该点之后添加更多的二进制位会减小此错误的规模,但不能消除它。

随着反复加法,误差逐渐累积。

如何避免这种情况?

0 投票
2 回答
2654 浏览

vba - Microsoft VBA 成语(Visio)用于测试不存在的属性?

我需要确保适用于 Visio 2003 的宏不会在较低版本的 Visio 上引起问题:特别是因为我正在写入一个在较低版本的 Visio 上不存在的属性。目前我正在这样做:

哪个有效,但我认为它有点混乱。我玩弄了使用“Application.version”的想法(对于 Visio 2003 返回“11”),但我想避免假设任何特定版本中可用的属性,而只是测试属性本身。

在 VBA 中执行此操作的正确习语是什么?

谢谢

---在下面得到了一些答案,我首选的解决方案是这个:

0 投票
10 回答
104137 浏览

python - 单行“if”/“for”语句是好的 Python 风格吗?

在这里,我经常看到某人的代码以及看起来是“单行”的代码,这是一条以传统“if”语句或“for”循环工作的标准方式执行的单行语句。

我用谷歌搜索,并不能真正找到你可以执行什么样的?任何人都可以建议并最好举一些例子吗?

例如,我可以在一行中做到这一点:

或者:

0 投票
2 回答
140 浏览

ruby - 在 Ruby 的类定义中设置类/实例变量的惯用方法是什么?

例如,在 Python 中,我可以创建这样的类:

...其中 bar 是类属性, some_attr 是实例属性。在 Ruby 中做这样的事情的惯用方式是什么?