小编Dav*_*uck的帖子

避免输出参数(没有副作用)

我正在阅读 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 程序确实存在突变,对象的更改超出了它们创建的范围。

如果我们创建一场改变两个玩家的战斗,情况会更糟,因为现在另一个对象在其方法内改变了两个参数: …

java coding-style side-effects parameter-passing

6
推荐指数
1
解决办法
1813
查看次数

由于不符合所有文件访问权限政策,Google Play 商店连续被拒绝

在目标 SDK API 级别迁移到 30 后,Google 审核团队不断拒绝我们的应用程序。拒绝原因是您的应用因违反政策而被拒绝且未发布。策略:所有文件访问权限。

Play 商店拒绝:
Play 商店拒绝

我们尚未在最新的清单中添加任何敏感权限和 API。也无法从我们最近提交的内容中找到任何请求敏感权限的 APK。

清单许可:
清单许可

在我们之前提交的一份文件中,我们不小心提交了一份“所有文件访问”权限声明表,但遭到了 Google 拒绝。

提交声明:
已提交声明

尽管我们已经在最新的APK中修复了这个权限问题,但声明表单从未消失或无法手动删除。由于同样的旧原因,该应用程序不断被拒绝。有过这种经历或者知道如何解决这个问题的人。

java android android-permissions google-play-console android-11

6
推荐指数
1
解决办法
4582
查看次数

如何为烧瓶应用程序设置空白默认语言环境?

我正在做一个烧瓶项目(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)

python localization internationalization flask python-babel

5
推荐指数
1
解决办法
1487
查看次数

Golang/gin 从 gin.Context 解析 JSON

我从 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直接解析吗?

parsing json go go-gin

5
推荐指数
1
解决办法
2万
查看次数

Django 项目中的迁移目录是否应该推送到 git 存储库?

在 Django 项目中,当模型更改时,迁移文件也会更改。如果我将迁移目录添加到 git,这会引起其他人的冲突。如果我不添加它,有时在迁移时会引发服务器错误。怎么解决这个\xef\xbc\x9f

\n

git django django-migrations

5
推荐指数
1
解决办法
1981
查看次数

(点击)事件在innerHtml字符串Angular 4中不起作用

当我点击<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...是动态创建

html typescript angular

5
推荐指数
2
解决办法
9987
查看次数

如何从覆盖范围中排除文件?

我正在运行我的单元测试。但我想在测试期间排除一些文件夹和文件。

这是我的.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

5
推荐指数
1
解决办法
5080
查看次数

包react-native-onesignal已被忽略,因为它包含无效的配置

我正在尝试在 React Native 应用程序中配置OneSignal React Native以用于推送通知。

环境设置

  1. 反应本机版本:0.60
  2. npm 版本 10.5

我按照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)

javascript react-native onesignal

5
推荐指数
1
解决办法
9149
查看次数

如何在 Windows 10 中为 python 3.9 安装 pygame?

我已经尝试了一切这里是我尝试过的一些方法

  1. 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)
  1. 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)

python pygame

5
推荐指数
2
解决办法
1万
查看次数

Django auto_now 与 auto_now_add

auto_now如果和被混淆就会遇到问题auto_now_add。如何做auto_nowauto_now_add工作?

auto_now:每次使用时都会创建时间models.save(),但models.create()如果使用则不起作用query.update(),它只更新一些数据,但不会自动更新日期

auto_now_addmodels.save():只有第一次使用或时才会创建时间models.create()

应该如何使用它们?

auto_now_add应该与 一起使用created_dateauto_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 django-models

5
推荐指数
1
解决办法
4684
查看次数