如果像我一样,您在尝试本地运行您的功能时会遇到此错误,那是因为functions.config()仅在云函数运行时可用。
如果您要在部署之前试图测试您的功能,则是有关如何执行的文档的链接:在本地运行函数。具体来说,此部分引起了人们的关注:
如果您使用自定义功能配置变量,请在运行firebase服务之前在项目的功能目录中运行以下命令。
firebase functions:config:get > .runtimeconfig.json
但是,如果您使用的是Windows PowerShell,请用以下方式替换上述命令
firebase functions:config:get | ac .runtimeconfig.json
您可以像提到的那样直接使用迭代器,也可以保留第二个集合,然后将要删除的每个项目添加到新集合中,然后在末尾删除。这使您可以继续以增加内存使用时间和CPU时间为代价来使用for-EAK循环的类型安全(除非您确实有真正,很大的列表或真正旧的计算机,否则不应该是一个巨大的问题)
public static void main(String[] args)
{
Collection<Integer> l = new ArrayList<Integer>();
Collection<Integer> itemsToRemove = new ArrayList<>();
for (int i=0; i < 10; i++) {
l.add(Integer.of(4));
l.add(Integer.of(5));
l.add(Integer.of(6));
}
for (Integer i : l)
{
if (i.intValue() == 5) {
itemsToRemove.add(i);
}
}
l.removeAll(itemsToRemove);
System.out.println(l);
}
您可以使用
echo 'a/b/c' | sed 's,\([^/]*\)/.*,\1,'
详细信息:
\([^/]*\)
- 组1(\ 1
):/
/
- a/
char。*
- 字符串的其余部分。
或者,如果您有变量,则可以使用字符串操作:
s='a/b/c'
echo "${s%%/*}"
# => a
在此,%%
从末端删除最长的子字符串,与/*
glob模式匹配,直到字符串中的第一个/
。
简单的方法是在时间戳上创建索引,然后名称:
CREATE INDEX my_idx ON mosmix_data(timestamp, name)
timestamp
是索引第一列的良好候选者,因为这是您where
strause中最紧的条件(在内部范围为4天)。
通过将name
放在索引中,喜欢
条件,因为第一个字符是未知的(它是>%
),它不会使用索引可以在索引中的值上执行,而不必从表中检索行。
deepcopy
有意复制正在复制的结构中的任何别名引用。它维护备忘录
在当前复制操作期间已经复制的对象的字典,当再次看到相同的对象时,它将别名插入已经复制的对象。除其他事项外,这使得递归数据结构安全(非遗传deepcopy
将永远恢复,直到记忆用尽并死亡)。
如果您希望各个元素都不陈述,deepcopy
单独使用,例如:
l2 = [copy.deepcopy(x) for x in l1*3]
分离的deepcopy
操作维护单独的回忆字典。
让
关键字是块范围,一旦在该范围之外无法访问范围内声明。
在您的情况下,让
关键字位于_test的范围:function(){}
。通过将其移到外面将完成工作。
let checkBox = document.getElementById("checkboxFullDownload");
_test: function() {
if (checkBox.checked) {
console.log("Checked");
localStorage.setItem(`${xmlTitle} ID:${this.item._id}`, "AllowFullDownload");
checkBox.checked = true;
}
if (!checkBox.checked) {
console.log("Unchecked");
localStorage.removeItem(`${xmlTitle} ID:${this.item._id}`);
checkBox.checked = false;
}
}
if (localStorage.getItem(`${xmlTitle} ID:${_test.item._id}`) === "AllowFullDownload") {
checkBox.checked = true;
console.log("set to true");
}
您的setUser(wonse);
调用来自strapi用户权限提供商的响应,看起来像这样:
data : {
user: {
...
},
jwt: ...
}
https://docs.strapi.io/developer-docs/latest/latest/plugins/plugins/plugins/permissions.html#login 。
尝试在此对象上访问IDUSER。
最终在YouTuber Cradletograver的帮助下发现了这个问题。用户错误!它是在conditionalformatting()中的“规则”公式中使用的,
我一直在使用openxlsx文档中的格式示例(例如,rule =“ $ colname = 1”,但将其应用于字符串(例如,rule =” $ colname = yes”),这就是为什么Excel无法识别它。
单引号(例如,rule ='$ colname =“ yes”
有条件地格式化字符串时,请使用围绕该值的双引号围绕规则的 展示如何在此视频中为文本值格式化, https://wwww.youtube.com/watch.com/watch.com/watch ?v = acdcquqjxhu
带有单引号:
后斜线随后是新线,将其传输到SED。然后,SED实际上使用后斜线将原始的Newline字符逃脱到字符串中,而不是终止命令。请参阅:
$ printf %s 'hello\
world' | hexdump -C
清楚地显示Backslash 5C
后面是String中包含的Newline 0a
。
00000000 68 65 6c 6c 6f 5c 0a 77 6f 72 6c 64 |hello\.world|
0000000c
带有双引号:
后斜线在双引号中具有特殊的含义。它导致以下newline字符被解释为字符串延续字符。结果是,后斜线或新线都不包含在字符串中,因此SED看不到。
$ printf %s "hello\
world" | hexdump -C
该字符串在没有后斜线的情况下继续进行,没有newline:
00000000 68 65 6c 6c 6f 77 6f 72 6c 64 |helloworld|
0000000a
编辑:
- SED实际上使用Backslash来逃避以下Newline字符,如@dan指出了@dan。
$sections = Post::with('meta')->where([
'type' => 'section',
'language' => 'it',
'status' => 'published',
])->get();
在执行不善的情况下,您需要每个数组的3个参数来咨询:
$sections = Post::with('meta')->where([
['type' '=>' 'section'],
['language' '=>' 'it'],
['status' '=>' 'published'])->get();
我不确定您要构建的查询构建器是什么,因为对我来说,它看起来更像是用这些箭头的分配。 ......无论您现在至少有正确的格式。
在index.html
中,在中,如果(13 === e.KeyCode){...}
语句,window.electronapi的参数.sendpin(...);
调用是错误的情况。它应该是PIN
,应该是PIN
。
也就是说,pin
在您的const handlekeyup = function(e){...}
函数中未更新,因此按下“ enter”(或“返回”)时。 ,它无法将更新的PIN
发送到您的渲染过程。
仔细查看index.html
文件中包含的JavaScript代码:
- 无需停止事件传播。
- Regex的事情可能很棘手,有时很难实施。仅在您真正需要的情况下才使用它们。
- 看来您使用
#display
值,而不是使用已定义的pin
变量来构建您的pin> pin
。
继续使用已定义的pin
变量,您可以一起使用鼠标和键盘(如果用户真正想要)输入PIN。
使用 data-attributes> data-attributes 是一种明智的方式标准化键PIN-PAD输入。将这个想法扩展到“输入”和“清晰”按钮将是一个好主意。将数据属性值转换为较低的情况并与有效的密钥列表进行比较仍然是必经之路。为“清除”按钮添加快捷方式c
也可以工作。 PS:ESC
也可以实现以清除显示。
最后,使用JavaScript使用JavaScript添加和删除包含颜色的CSS类名称,而不是通过手动添加和删除凹陷的按钮背景颜色。将CSS设置保留在样式表中,可以进行良好的代码分离且容易调试。 PS:有时,人们在其CSS类名称中添加JS - < / code>前缀,该名称由JavaScript切换 /控制。
在下面,我在CSS中添加了其他悬停
/JS depressed
类,以涵盖鼠标和键盘用户的反馈。
pinpad.css
(渲染过程)
#pin-pad div:hover,
#pin-pad div.js-depressed {
background-color: #ccc;
}
,我借此自由来刷新您的index.html
javascript稍微删除不必要的代码行,并简化了键盘的实现(与鼠标)实现。
可以进行更多的重构以保持代码干燥(如果愿意,请不要重复)。
使您的代码尽可能简单,可以易于阅读 /调试代码。
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="pinpad.css"/>
<meta charset="UTF-8"/>
<title>Electron Test - Pin Pad</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';"/>
</head>
<body>
<div id="container">
<div id="wrapper">
<input type="text" id="display" disabled/>
<div id="pin-pad">
<div data-key="1">1</div>
<div data-key="2">2</div>
<div data-key="3">3</div>
<div data-key="4">4</div>
<div data-key="5">5</div>
<div data-key="6">6</div>
<div data-key="7">7</div>
<div data-key="8">8</div>
<div data-key="9">9</div>
<div data-key="enter">Enter</div>
<div data-key="0">0</div>
<div data-key="clear">Clear</div>
</div>
</div>
</div>
</body>
<script>
let display = document.getElementById('display');
let validKeys = [
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'0',
'enter',
'clear',
'backspace'
];
let pin = "";
// Mouse input
document.getElementById('pin-pad').addEventListener('click', (event) => {
let key = event.target.dataset.key;
if (! validKeys.includes(key)) {
return;
}
if (key === 'enter') {
window.electronAPI.sendPin(pin);
return;
}
if (key === 'clear') {
pin = display.value = "";
return;
}
pin = pin + key;
display.value = '*'.repeat(pin.length);
});
// Keyboard input
document.addEventListener('keydown', (event) => {
let key = event.key.toLowerCase();
if (! validKeys.includes(key)) {
return;
}
if (key === 'backspace') {
pin = pin.slice(0, -1);
display.value = "*".repeat(pin.length);
return;
}
document.querySelector(`[data-key="${key}"]`).classList.add('js-depressed');
if (key === 'enter') {
window.electronAPI.sendPin(pin);
return;
}
pin = pin + key;
display.value = '*'.repeat(pin.length);
});
document.addEventListener('keyup', (event) => {
let key = event.key.toLowerCase();
if (! validKeys.includes(key) || key === 'backspace') {
return;
}
document.querySelector(`[data-key="${key}"]`).classList.remove('js-depressed');
});
</script>
</html>
一个人没有考虑到弹跳。即:如果用户将手指握在钥匙上,则输入将以快速速率重复填充引脚场。如果不需要此行为,则可能希望添加“弹跳”功能。
另外,您可以使用索引使用[:]
访问列表的操作员:
M = [[0,1,0,1],[0,0,1,0]]
for i in range(len(M)):
for j in range(len(M[i])):
print(M[i][j])
通常,在创建订单时,您需要在创建订单时使用客户ID。因此,您通过电子邮件检查该客户是否存在?如果这样做,您只需提供ID即可。如果您跳过该步骤(请记住,客户是Shopify订单的一个单独的方面),那么您可能会遇到此问题。给Shopify提供了一封电子邮件,试图创建客户,系统说停在那里,该客户已经存在,您从未提供ID。
听起来很奇怪,但是也许您从未遇到这个问题,因为您从来没有遇到过乡间的客户?如您所知,大多数订单是一次性的,并且在很多商店中都不重复。
不确定这种解释是完全有意义的,但是无论如何,我发现的解决方法只是在尝试创建订单之前建立客户。您要么为现有的ID使用ID,要么创建新的ID。
您不应该在系统运行的脚本中依靠您的“当前”或“工作”目录。指定要输出文件的整个路径。
您 can 使用os.chdir()使您的首选目的地成为当前的dir,但这不是最好的方法。完整的路径。
You shouldn't rely on your "current" or "working" directory in a script run from the system. Specify the full path to where you want your output files.
You can use os.chdir() to make your preferred destination your current dir, but that's not the best way. Full paths.
从Windows计划的任务运行的Python脚本是将数据存储在错误的文件夹中