我正在阅读 Robert C. Martin 的《简洁代码》,但我无法完全理解第 44 至 45 页的“无副作用”和“输出参数”部分。
在“没有副作用”部分中,指出传递给方法参数的更改被视为副作用,不应执行。
在“输出参数”部分中,规定方法的参数不应改变。如果必须更改某些状态,则方法应该仅更改其所属对象的状态。
我确实理解,如果指定此行为的方法是由不完全意识到这一点的客户端调用的,则副作用和输出参数可能会导致令人困惑的行为和错误。此外,在多线程环境中工作时这也是有问题的。
但考虑到“干净代码”一书是基于 Java 示例编写的,我感到很困惑。
让我们看一个例子。假设我们有一个玩家类别:
public class Player {
private int healthPoints;
private boolean alive = true;
public Player(int healthPoints) {
if(healthPoints < 1) {
throw new IllegalArgumentException();
}
this.healthPoints = healthPoints;
}
public boolean isAlive() {
return this.alive;
}
public void fight(Player otherPlayer) {
//do some fighting which will change this instance
// but also the otherPlayer instance
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们现在调用以下函数:
player1.fight(player2);
Run Code Online (Sandbox Code Playgroud)
这将改变player1的状态以及player2的状态。在大多数情况下,罗伯特·C·马丁(Robert C. Martin)不鼓励这样做。但实际上,我经常看到这种模式。大多数 Java 程序确实存在突变,对象的更改超出了它们创建的范围。
如果我们创建一场改变两个玩家的战斗,情况会更糟,因为现在另一个对象在其方法内改变了两个参数: …
在目标 SDK API 级别迁移到 30 后,Google 审核团队不断拒绝我们的应用程序。拒绝原因是您的应用因违反政策而被拒绝且未发布。策略:所有文件访问权限。
我们尚未在最新的清单中添加任何敏感权限和 API。也无法从我们最近提交的内容中找到任何请求敏感权限的 APK。
在我们之前提交的一份文件中,我们不小心提交了一份“所有文件访问”权限声明表,但遭到了 Google 拒绝。
尽管我们已经在最新的APK中修复了这个权限问题,但声明表单从未消失或无法手动删除。由于同样的旧原因,该应用程序不断被拒绝。有过这种经历或者知道如何解决这个问题的人。
java android android-permissions google-play-console android-11
我正在做一个烧瓶项目(Python3)。我的项目中的国际化工作正常。这是在 create_app 工厂中启动的配置方法:
def configure_languages(app):
# flask-babel
babel = Babel(app)
@babel.localeselector
def get_locale():
languages = ['en', 'fr', 'de']
lang = request.args.get('lang')
if lang is None:
return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
elif lang not in languages:
return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
else:
g.lang_code = lang
return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
@app.before_request
def ensure_lang_support():
lang_code = g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
if lang_code and lang_code not in app.config['SUPPORTED_LANGUAGES']:
return abort(404)
@app.url_defaults
def set_language_code(endpoint, values):
if 'lang_code' in values or not g.get('lang_code',
app.config['BABEL_DEFAULT_LOCALE']):
return
if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
values['lang_code'] = g.get('lang_code',
app.config['BABEL_DEFAULT_LOCALE'])
@app.url_value_preprocessor …Run Code Online (Sandbox Code Playgroud) 我从 gin doc 中了解到,您可以将 json 绑定到类似的结构
type Login struct {
User string `form:"user" json:"user" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
func main() {
router := gin.Default()
// Example for binding JSON ({"user": "manu", "password": "123"})
router.POST("/loginJSON", func(c *gin.Context) {
var json Login
if c.BindJSON(&json) == nil {
if json.User == "manu" && json.Password == "123" {
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
} else {
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
}
}
})
}
Run Code Online (Sandbox Code Playgroud)
您始终必须构建一个结构来绑定 JSON。
但是如果有一个非常复杂的JSON数据,我只需要获取其中的一部分,创建一个复杂的struct是一个很大的负担。可以避免id直接解析吗?
在 Django 项目中,当模型更改时,迁移文件也会更改。如果我将迁移目录添加到 git,这会引起其他人的冲突。如果我不添加它,有时在迁移时会引发服务器错误。怎么解决这个\xef\xbc\x9f
\n当我点击<a...标签时,我的函数没有被调用。
我的组件中有以下代码:
public htmlstr: string;
public idUser:number;
this.idUser = 1;
this.htmlstr = `<a (click)="delete(idUser)">${idUser}</a>`;
public delete(idUser){
alert("id " + idUser);
}
Run Code Online (Sandbox Code Playgroud)
我的html
<div [innerHTML]="htmlstr"></div>
Run Code Online (Sandbox Code Playgroud)
但该函数delete未被调用且不显示警报。
该<div...是动态创建
我正在运行我的单元测试。但我想在测试期间排除一些文件夹和文件。
这是我的.coveragerc文件
[run]
branch = True
source = .
omit =
Amazon_customers/.coveragerc
amazon_customers/tests
Amazon_customers/__init__.py
Amazon_customers/urls.py
Amazon_customers/wsgi.py
amazon_customers/test_utils/*
/migrations/
/manage.py/
Run Code Online (Sandbox Code Playgroud)
我需要排除这些文件,但它不起作用。
django unit-testing django-views python-3.x django-rest-framework
我正在尝试在 React Native 应用程序中配置OneSignal React Native以用于推送通知。
环境设置
我按照React Native One Signal 官方文档中的以下步骤进行设置:
步骤 1 : npm install -g react-native-cli, 状态 : 完成
步骤 2 : react-native init OneSignalDemo, 状态 : 完成
在链接项目之前,我使用以下命令成功运行了我的项目:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
react-native run-android
Run Code Online (Sandbox Code Playgroud)
第 3 步:在链接我的库时,react-native link react-native-onesignal我的终端出现错误。将 oneSignal 与我的应用程序链接(根据官方文档),状态:失败
错误:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
react-native run-android …Run Code Online (Sandbox Code Playgroud) 我已经尝试了一切这里是我尝试过的一些方法
C:\Users\win 10\AppData\Local\Programs\Python\Python39> python -m pip install pygame-1.9.6-cp27-cp27m-win_amd64.whl提示如下错误:
ERROR: pygame-1.9.6-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
Run Code Online (Sandbox Code Playgroud)
C:\Users\win 10\AppData\Local\Programs\Python\Python39> pip install pygame提示如下错误:
ERROR: Command errored out with exit status 1:
command: 'c:\users\win 10\appdata\local\programs\python\python39\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\win 10\\AppData\\Local\\Temp\\pip-install-l782i464\\pygame\\setup.py'"'"';
__file__='"'"'C:\\Users\\win 10\\AppData\\Local\\Temp\\pip-install-l782i464\\pygame\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\win 10\AppData\Local\Temp\pip-pip-egg-info-1zl98t9z'
cwd: C:\Users\win 10\AppData\Local\Temp\pip-install-l782i464\pygame\
Complete output (17 lines):
**WARNING, No "Setup" File Exists, Running "buildconfig/config.py"
Using WINDOWS configuration...
Download prebuilts to "prebuilt_downloads" and copy to …Run Code Online (Sandbox Code Playgroud) auto_now如果和被混淆就会遇到问题auto_now_add。如何做auto_now或auto_now_add工作?
auto_now:每次使用时都会创建时间models.save(),但models.create()如果使用则不起作用query.update(),它只更新一些数据,但不会自动更新日期
auto_now_addmodels.save():只有第一次使用或时才会创建时间models.create()
应该如何使用它们?
auto_now_add应该与 一起使用created_date并auto_now应该与 一起使用updated_date
created_date = models.DateTimeField(auto_now_add = True)
updated_date = models.DateTimeField(auto_now = True)
Run Code Online (Sandbox Code Playgroud) django ×3
java ×2
python ×2
android ×1
android-11 ×1
angular ×1
coding-style ×1
django-views ×1
flask ×1
git ×1
go ×1
go-gin ×1
html ×1
javascript ×1
json ×1
localization ×1
onesignal ×1
parsing ×1
pygame ×1
python-3.x ×1
python-babel ×1
react-native ×1
side-effects ×1
typescript ×1
unit-testing ×1