问题标签 [least-astonishment]

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 投票
3 回答
183 浏览

date - 不存在的日期上的重复日期

当给出某种选择以重新发生的每一定时间时,我应该如何处理在每个间隔上不再重复发生的时间?

例如,2 月 29 日的生日提醒应该如何处理?或者,如果我在 31 日进行了每月约会,那么在没有 31 日的月份会发生什么?

您认为合理的用户会期望什么并且最不惊讶

0 投票
31 回答
208836 浏览

python - “Least Astonishment”和可变默认参数

任何修补 Python 时间足够长的人都被以下问题咬伤(或撕成碎片):

Python 新手会期望这个函数总是返回一个只有一个元素的列表:[5]. 结果却大不相同,而且非常惊人(对于新手来说):

我的一位经理曾经第一次遇到此功能,并称其为该语言的“戏剧性设计缺陷”。我回答说这种行为有一个潜在的解释,如果你不了解内部情况,确实非常令人费解和意外。但是,我无法(对自己)回答以下问题:在函数定义而不是函数执行时绑定默认参数的原因是什么?我怀疑经验丰富的行为是否有实际用途(谁真正在 C 中使用静态变量,没有滋生错误?)

编辑

Baczek 举了一个有趣的例子。连同您的大部分评论,尤其是 Utaal 的评论,我进一步阐述了:

对我来说,设计决策似乎与将参数范围放在哪里有关:在函数内部,还是与它“一起”?

在函数内部进行绑定意味着在调用x函数时有效地绑定到指定的默认值,而不是定义,这会带来一个严重的缺陷:def从绑定的一部分(的函数对象)将在定义时发生,部分(默认参数的分配)在函数调用时发生。

实际行为更加一致:该行的所有内容都在执行该行时进行评估,这意味着在函数定义处。

0 投票
1 回答
681 浏览

.net - 不应该使用 FieldInfo.SetValue 将 ValueType 设置为 null 失败吗?

(与PropertyInfo SetValue 和 nulls相关)

如果我有指向该字段的public class Thing { public int X; }、 aThing o和 a ,为什么调用 是合法的?运行时将该字段设置为零,而不是抱怨 a不能设置为。FieldInfo fiXfi.SetValue(o, null)Xdefault(int)ValueTypenull

有谁知道这种行为背后的设计选择,至少从 C# 来看,这违反了我最不惊讶的原则?

0 投票
5 回答
6387 浏览

python - Python 中的“布尔”运算(即:和/或运算符)

此方法搜索第一组单词字符(即:)[a-zA-Z0-9_],返回第一个匹配的组或None在失败的情况下。

相同的函数可以重写为:

这同样有效,并且是记录在案的行为;正如本页明确指出的那样:

表达式x and y首先计算x; 如果x为假,则返回其值;否则,y评估并返回结果值。

但是,作为一个布尔运算符(它甚至在手册上这么说),我希望and返回一个布尔值。结果,当我发现它(如何)起作用时 ,我感到很惊讶。

这还有哪些其他用例,和/或这种相当不直观的实现的基本原理是什么?

0 投票
1 回答
236 浏览

python - 在 Python 中使用可变类型作为默认参数有什么影响?

可能的重复:
为什么“可变默认参数修复”语法如此丑陋,python 新手
最不惊讶地问 python:可变默认参数

这是一个例子。

0 投票
1 回答
224 浏览

ruby - 奇怪的 Ruby 行为

我需要检查一个变量是否是一个数组,如果不是,则在继续进一步处理之前将其转换为一个。所以,我的代码如下所示:

我对 ruby​​ 很陌生,所以也许这不是很惯用,但在我看来,这段代码至少应该可以工作。相反,我第二次打印args变量时,它是[nil]. 请注意,如果我eval稍微改变方法:

一切都按预期工作。那么,是否有一些我不明白的 Struct 类非常具体的东西,或者这里发生了什么可疑的事情?(在 macOS 上使用 ruby​​ 1.9.3-dev,使用 rvm)

0 投票
1 回答
92 浏览

java - 我应该给支持 bean 命名而不是类吗?

我应该在注释中给支持 bean 一个新名称@Named,还是应该使用与类相同的名称以提高可读性?是否有关于何时不这样做或何时这样做的指导方针?

我有一个支持 bean,它提供了一个带有值的下拉组件。它在多个地方使用并且是只读的,因此我将其设置为应用程序范围。我命名它StatusValuesManager

0 投票
3 回答
19348 浏览

database - 为什么负 id 或零被认为是不好的做法?

为什么在数据库表中插入主键时,负 id 或零被认为是不好的做法?

我认为它在某些情况下可能很有用,但人们说不推荐这样做,尽管他们从不说/不知道为什么。

所以,我想知道根据定义是否存在一些限制,或者它是否应该没有任何问题,或者它是否只是一个约定,如果确实有一些限制,为什么不阻止该功能?

0 投票
1 回答
220 浏览

architecture - 多层架构中的默认函数值

想知道在多层应用程序结构中设置默认值的最佳方式。具体来说,如果某个工作流程需要一组嵌套的函数调用,是在所有函数上指定默认值,还是仅在顶层函数上指定并向下传递?还是完全是其他模式?

例如,考虑一个具有 3 层的 Web 应用程序:

  • 资源层处理 HTTP 请求和响应,从客户端获取 HTTP 参数
  • 业务层执行确定需要哪些信息所需的业务逻辑
  • 数据层访问数据库并返回请求的数据。

假设客户想要获得一个对象——对于这个例子,假设它是一个Place对象。地点对象有一个type——城市、州、镇、县等。

资源函数可能如下所示(使用 Django HTTP 对象):

那么另外两个可能是:

这个堆栈中资源层“下方”的两个函数是否也应该默认类型为无? 我的一部分认为这样做会违反 DRY。我的另一部分认为,最可预测和模块化的方法是堆栈中的每个函数都将默认类型“明智地”设置为 None。

0 投票
1 回答
954 浏览

ruby-on-rails - 在 ActiveRecord 类方法中返回 `self` 会丢失间接引用

在 ActiveRecord 中定义类方法时,如果我 return self,间接引用将丢失。

我不确定我是否使用了正确的词汇,因为我只是在学习 Ruby on Rails,所以这里有一个例子:

使用上面的定义,会发生以下情况:

所以,返回self似乎让“只有这个用户的兰花”的间接范围消失了。返回self那里意味着我要返回Orchid课程而不是ActiveRecord::Relation

在互联网上阅读了一下,我确实找到了有关范围以及为什么要使用它们的信息。范围确实按我期望的方式工作,我现在正在使用它们。我只是不明白为什么在使用类方法定义时会这样。