问题标签 [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.
date - 不存在的日期上的重复日期
当给出某种选择以重新发生的每一定时间时,我应该如何处理在每个间隔上不再重复发生的时间?
例如,2 月 29 日的生日提醒应该如何处理?或者,如果我在 31 日进行了每月约会,那么在没有 31 日的月份会发生什么?
您认为合理的用户会期望什么并且最不惊讶?
python - “Least Astonishment”和可变默认参数
任何修补 Python 时间足够长的人都被以下问题咬伤(或撕成碎片):
Python 新手会期望这个函数总是返回一个只有一个元素的列表:[5]
. 结果却大不相同,而且非常惊人(对于新手来说):
我的一位经理曾经第一次遇到此功能,并称其为该语言的“戏剧性设计缺陷”。我回答说这种行为有一个潜在的解释,如果你不了解内部情况,确实非常令人费解和意外。但是,我无法(对自己)回答以下问题:在函数定义而不是函数执行时绑定默认参数的原因是什么?我怀疑经验丰富的行为是否有实际用途(谁真正在 C 中使用静态变量,没有滋生错误?)
编辑:
Baczek 举了一个有趣的例子。连同您的大部分评论,尤其是 Utaal 的评论,我进一步阐述了:
对我来说,设计决策似乎与将参数范围放在哪里有关:在函数内部,还是与它“一起”?
在函数内部进行绑定意味着在调用x
函数时有效地绑定到指定的默认值,而不是定义,这会带来一个严重的缺陷:def
从绑定的一部分(的函数对象)将在定义时发生,部分(默认参数的分配)在函数调用时发生。
实际行为更加一致:该行的所有内容都在执行该行时进行评估,这意味着在函数定义处。
.net - 不应该使用 FieldInfo.SetValue 将 ValueType 设置为 null 失败吗?
(与PropertyInfo SetValue 和 nulls相关)
如果我有指向该字段的public class Thing { public int X; }
、 aThing o
和 a ,为什么调用 是合法的?运行时将该字段设置为零,而不是抱怨 a不能设置为。FieldInfo fi
X
fi.SetValue(o, null)
X
default(int)
ValueType
null
有谁知道这种行为背后的设计选择,至少从 C# 来看,这违反了我最不惊讶的原则?
ruby - 奇怪的 Ruby 行为
我需要检查一个变量是否是一个数组,如果不是,则在继续进一步处理之前将其转换为一个。所以,我的代码如下所示:
我对 ruby 很陌生,所以也许这不是很惯用,但在我看来,这段代码至少应该可以工作。相反,我第二次打印args
变量时,它是[nil]
. 请注意,如果我eval
稍微改变方法:
一切都按预期工作。那么,是否有一些我不明白的 Struct 类非常具体的东西,或者这里发生了什么可疑的事情?(在 macOS 上使用 ruby 1.9.3-dev,使用 rvm)
java - 我应该给支持 bean 命名而不是类吗?
我应该在注释中给支持 bean 一个新名称@Named
,还是应该使用与类相同的名称以提高可读性?是否有关于何时不这样做或何时这样做的指导方针?
我有一个支持 bean,它提供了一个带有值的下拉组件。它在多个地方使用并且是只读的,因此我将其设置为应用程序范围。我命名它StatusValuesManager
。
database - 为什么负 id 或零被认为是不好的做法?
为什么在数据库表中插入主键时,负 id 或零被认为是不好的做法?
我认为它在某些情况下可能很有用,但人们说不推荐这样做,尽管他们从不说/不知道为什么。
所以,我想知道根据定义是否存在一些限制,或者它是否应该没有任何问题,或者它是否只是一个约定,如果确实有一些限制,为什么不阻止该功能?
architecture - 多层架构中的默认函数值
想知道在多层应用程序结构中设置默认值的最佳方式。具体来说,如果某个工作流程需要一组嵌套的函数调用,是在所有函数上指定默认值,还是仅在顶层函数上指定并向下传递?还是完全是其他模式?
例如,考虑一个具有 3 层的 Web 应用程序:
- 资源层处理 HTTP 请求和响应,从客户端获取 HTTP 参数
- 业务层执行确定需要哪些信息所需的业务逻辑
- 数据层访问数据库并返回请求的数据。
假设客户想要获得一个对象——对于这个例子,假设它是一个Place
对象。地点对象有一个type
——城市、州、镇、县等。
资源函数可能如下所示(使用 Django HTTP 对象):
那么另外两个可能是:
这个堆栈中资源层“下方”的两个函数是否也应该默认类型为无? 我的一部分认为这样做会违反 DRY。我的另一部分认为,最可预测和模块化的方法是堆栈中的每个函数都将默认类型“明智地”设置为 None。
ruby-on-rails - 在 ActiveRecord 类方法中返回 `self` 会丢失间接引用
在 ActiveRecord 中定义类方法时,如果我 return self
,间接引用将丢失。
我不确定我是否使用了正确的词汇,因为我只是在学习 Ruby on Rails,所以这里有一个例子:
使用上面的定义,会发生以下情况:
所以,返回self
似乎让“只有这个用户的兰花”的间接范围消失了。返回self
那里意味着我要返回Orchid
课程而不是ActiveRecord::Relation
?
在互联网上阅读了一下,我确实找到了有关范围以及为什么要使用它们的信息。范围确实按我期望的方式工作,我现在正在使用它们。我只是不明白为什么在使用类方法定义时会这样。