IntelliJ Idea:2016.1 Windows 10 Pro
当我在新项目中创建新项目或新类时,IntelliJ有用地包含一个包含我的名字和日期的默认标题.但是,它还会突出显示代码并使用"默认文件模板"显示有关文件的警告.它提出了两种纠正代码的方法.通过编辑模板或将其替换为实际的文件模板.但是,两种选择都不满足警告; 也不会手动替换标题的内容.我无法找到摆脱它的方法.
我知道我可以压制警告,但我更愿意纠正或修复它.
有任何想法吗?
我正在使用uVision 5的教育/评估版本.在调试项目时,反汇编窗口标记下一个将在边距中用黄色箭头执行的语句.
当达到该行代码时,每行文本编辑器中的边距将变为绿色.这似乎意味着文本编辑器知道当前正在执行的代码行.
但是,文本编辑器不会更新,除非它丢失并重新获得焦点,因此很难跟踪调试时我所处的代码行.我必须按F11,然后单击文本编辑器中的滚动条,看到下一行变为绿色,以便能够跟踪我所处的位置.
我知道有一些方法可以使文本编辑器与当前正在执行的代码保持同步,因为我已经在同学的计算机上看了几个项目,每次按F11都会更新编辑器(下一个声明) ).但是,他和我都不知道如何启用此功能.
只有当某个函数(或其调用的函数)中没有任何内容引用从它们派生的 props、状态或值时,才可以安全地从依赖项列表中省略该函数。
常见问题解答接着给出了一个示例,其中省略了该函数,并表示代码包含错误。然而,常见问题解答从未提及该错误是什么。
我做了一个类似的例子,我创建了一个使用两个状态的函数。然后从 useEffect 钩子调用该函数,该钩子的依赖项列表中只有一部分状态。然而,即使存在针对缺失依赖项所承诺的 ESLint 警告,该函数和 useEffect 挂钩仍按预期工作。
export function UseEffectEx(props) {
const [greeting, setGreeting] = useState("Hello");
const [name, setName] = useState("John");
const [randomNumber, setRandomNumber] = useState(Math.random());
function greet() {
alert(`${greeting}, ${name}.`);
}
useEffect(
function greetOnGreetingChange() {
greet();
},
[greeting]
);
return (
<div>
<button onClick={greet}>Greet</button>
<button onClick={() => setGreeting("Hello")}>
set greeting to 'Hello'
</button>
<button onClick={() => setGreeting("Goodbye")}>
set greeting to 'Goodbye' …Run Code Online (Sandbox Code Playgroud) 我正在学习Python与其他语言的良好背景.我的问题主要是学术问题,因为我知道我所要求的内容很少需要,绝对不是一个好的编程实践.
这是我要问的:
x = 'global scope' # global
def func():
x = 'local scope' # global x is now shadowed
print(global x) # is this somehow possible?
Run Code Online (Sandbox Code Playgroud)
尝试#1
def attempt1():
x = 'local scope' # shadowded
global x
print(x) # error
Run Code Online (Sandbox Code Playgroud)
这会导致错误:在全局声明之前将名称"x"分配给它.
尝试#2
def attempt2():
x = 'local scope' # shadowded
print(__main__.x) # error: __main__ not defined
Run Code Online (Sandbox Code Playgroud)
名称空间状态的Python文档表明#2(或类似的东西)应该是可能的.请参阅Python教程9.2
"从脚本文件中读取或交互式地从顶层调用解释器执行的语句被认为是名为__main__的模块的一部分,因此它们具有自己的全局命名空间."
但是,尝试__main__从脚本或控制台访问会导致错误.此外,global属性__name__指的是最外面的模块__builtins__,但是它只包含内置变量,而不包含任何用户定义的全局变量.如果变量是在外部模块中进行的,那么已导入的模块可以使用__module_name__.variable.
这是我的目录结构:
Projects
+ Project_1
+ Project_2
- Project_3
- Lib1
__init__.py # empty
moduleA.py
- Tests
__init__.py # empty
foo_tests.py
bar_tests.py
setpath.py
__init__.py # empty
foo.py
bar.py
Run Code Online (Sandbox Code Playgroud)
目标:
我通过使用上述结构实现了#1
通过执行以下操作,我大部分都达到了2,3和4(按照这本优秀指南的建议)
在任何需要访问父模块或堂兄模块的软件包(例如上面的Tests目录)中,我包含一个名为setpath.py的文件,其中包含以下代码:
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('...'))
Run Code Online (Sandbox Code Playgroud)
然后,在需要父/表兄弟访问的每个模块中,例如foo_tests.py,我可以编写一个很好的干净的导入列表,如下所示:
import setpath # Annoyingly, PyCharm warns me that this is an unused import statement
import foo.py
Run Code Online (Sandbox Code Playgroud)
在setpath.py中,第二次和第三次插入对于此示例并非严格必要,但作为故障排除步骤包含在内.
我的问题是,这仅适用于直接引用模块名称的导入,而不适用于引用该包的导入.例如,在bar_tests.py中,当直接运行bar_tests.py时,下面的两个语句都不起作用.
import setpath
import Project_3.foo.py # Error
from Project_3 import foo …Run Code Online (Sandbox Code Playgroud) 我喜欢在我的文本编辑器中更改我的默认配色方案。我喜欢 Sublime 并将其用于许多 .txt 文档。我不喜欢使用的默认白底灰方案。
我看到了有关如何根据文件类型更改特定背景颜色的其他答案,但我没有遇到任何有关使特定文件类型使用默认设置的问题。
我希望我在 sublime 中打开/创建的任何文本文件都使用与我当前从首选项菜单中选择的颜色方案相同的配色方案。
在 WebStorm 中处理 CSS 文件时,intellisense 将对属性名称(当我开始输入时显示可能的属性列表)和属性值(显示可能的字符串值,当属性是颜色选择器时显示颜色)进行操作, 等等)。
当使用 React 和其他更喜欢在组件 JavaScript 文件中内联 CSS 的库/框架时,我希望有相同类型的代码完成。然而,当定义一个带有名称/值对的 React 对象作为 style 属性的值时,WebStorm 将其视为一个普通的 JavaScript 对象,没有任何 CSS 特定的信息。
有没有办法向 WebStorm 指示名称对应于 CSS 样式属性,或者对象本身包含样式规则?
(注意:我知道JitPack但它似乎只支持.jar和.aar文件,而不是直接的二进制文件或可执行文件)
我正在创建一个项目模板,该模板依赖于许多第三方库,其中大多数库都可以在 Maven Central 上找到。但也有一些命令行二进制文件存在于公共 Git 版本或其他稳定 URL 中。
由于这些二进制文件将直接由我正在编写的 Java 模块使用,因此它们是项目依赖项,但我不确定如何最好地将它们合并到我的 Gradle 构建中。
我不打算通过 Maven 提供项目模板,也不希望将第三方二进制文件上传到 Maven 存储库。相反,我希望模板的使用者在构建或运行时下载二进制文件。
我发现了gradle-download-task插件,并设法通过以下方式将其拼凑成依赖项。
// build.gradle
plugins {...}
def downloadXXX() {
mkdir 'bin'
download {
src 'https://github.com/.../tagged_release/xxx.exe'
dest 'bin'
onlyIfModified true
}
return files("bin/xxx.exe")
}
...
dependencies {
testImplementation ...
implementation ...
implementation downloadXXX()
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效。在编译/构建任务中检查二进制文件是否存在,如果丢失或过时则下载,但它闻起来不对。虽然我是 Gradle 新手,但似乎我应该创建一个下载任务而不仅仅是一个函数,或者完全做其他事情。
我知道,如果不使用 Maven,我将牺牲大量内置版本控制支持,但我更感兴趣的是 a) 在一个地方声明/显示项目依赖项,以及 b) 允许我的模板的使用者执行以下操作尽可能多的一键设置。
有没有更好的办法?
我正在尝试返回父列表中包含长度> 1的所有子列表中包含的元素总数的计数:
x = [[4], [6, 4, 9], [4, 6], [0], []]
# 1) Filter on x for only lists whose length is > 1
# 2) Reduce the new list to a sum of the lengths of each sublist
# result should be 5
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
# Invalid as y is a list
reduce((lambda x, y: len(x) + y), filter((lambda x: len(x) > 1), x))
Run Code Online (Sandbox Code Playgroud)
我认为地图可能会以某种方式涉及,但我不确定如何构建它.
我理解为什么lambda表达式不能改变局部变量,我理解他们可以访问和mututae类字段.对我来说,lambdas在许多情况下创建了更具表现力的代码,我想更频繁地使用它们.
我的问题是使用lambda的最佳实践不是单方法对象替换,而是简化代码如下:
int pairsFound = 0;
for (Map.Entry<String, Integer> entry : counters.entrySet())
{
if (entry.getValue() == 2)
pairsFound++;
}
Run Code Online (Sandbox Code Playgroud)
至
pairsFound = map.forEach((key, value) ->
{
int z = 0;
if (value == 2)
z++;
return z;
});
Run Code Online (Sandbox Code Playgroud)
要么
map.forEach((key, value) ->
{
if (value == 2)
pairsFound++;
});
Run Code Online (Sandbox Code Playgroud)
一种解决方案是创建parisFound一个实例字段.但是,对于从未在单一方法之外使用过的变量进行实例化,对我来说似乎是一种代码味道.此外,如果封闭类是静态的(例如在测试运行中),这将不起作用.
是否还有其他方法可以从lambda中获取信息,其方式与使用每个循环的安全性相比没有任何安全性?我理解lambda可能存在并发问题,但在我的大多数简化用例中,我不知道lambda是否会比它替换的更安全.
我理解并非常清楚传递函数作为参数与调用函数以及结果作为参数之间的区别。我相信我正确地传递了功能。
我的应用程序中有数十个模型,并且有许多现有记录。我需要向每个模型添加随机种子,这些种子将在创建新模型实例时创建和设置。我还想为现有实例生成随机种子。
我对Django模型默认设置和Migrations如何工作的理解是,当向模型添加新字段时,如果该字段设置了默认值,Djano将使用新字段和相应的默认值更新所有现有实例。
但是,尽管事实上我肯定会传递一个函数作为默认值,并且该函数会产生一个随机数,但是Django在更新现有行时会使用相同的随机数(例如,Djano似乎只调用了一次函数,然后使用所有条目的返回值)。
我的代码的简化版:
def get_random():
return str(random.random())
class Response(models.Model):
# various properties
random = models.CharField(max_length=40, default=get_random)
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = JSONField(null=True)
Run Code Online (Sandbox Code Playgroud)
在模型和它的许多实例已经创建之后,将添加随机字段。makemigrations出现一条命令来生成正确的迁移文件,并带有一个migrations.AddField()调用,并将其default=get_random作为参数传入。
但是,运行后makemigrations,所有现有的现有Response实例在其随机字段中都包含完全相同的数字。创建和保存模型的新实例将按预期方式工作(使用伪唯一随机数)。
一个简单的解决方法是只运行一次脚本
for r in Response.objects.all():
r.random = get_random()
r.save()
Run Code Online (Sandbox Code Playgroud)
或覆盖模型的save()方法,然后进行批量保存。但我认为这些变通办法不是必需的。这也意味着,如果我想使用随机默认值创建唯一字段,那么我将需要多次迁移。首先,我必须添加具有指定默认值的字段。接下来,我将需要应用迁移并手动重新初始化字段值。然后进行第二次迁移以添加unique=True属性。
看来,如果Django要在上将默认值应用于现有实例,makemigrations则应使用与创建新实例相同的语义来应用默认值。有什么方法可以强制Django在迁移时为每个模型实例调用函数?
给定以下JavaScript方法:
class SomeApi {
async getData(signal = null) {
const resp = await fetch(url, {signal});
return resp.json()
}
}
export default SomeApi()
Run Code Online (Sandbox Code Playgroud)
当我使用下面的TypeScript代码调用它时,出现编译错误,指出Argument of type 'AbortSignal' is not assignable to parameter of type 'null | undefined'
import api from '...'
const abortController = new AbortController();
api.getData(abortController.signal).then(data => console.log);
Run Code Online (Sandbox Code Playgroud)
TypeScript 似乎错误地推断了 JavaScript 函数参数的类型。正确的类型应该类似于AbortConroller | null. 我可以用常见的 hack 来消除错误getData(AbortController.signal as any),但是有更好的方法吗?
假设这SomeApi是一个库函数,我无法更改代码。
python ×4
java ×3
python-3.x ×3
javascript ×2
reactjs ×2
arm ×1
css ×1
debugging ×1
django ×1
gradle ×1
ide ×1
keil ×1
lambda ×1
maven ×1
organization ×1
postgresql ×1
react-hooks ×1
sublimetext ×1
sublimetext3 ×1
typescript ×1
webstorm ×1