Adobe非常清楚地表明,您不能在服务器应用程序中使用Indesign Desktop应用程序,
https://www.adobe.com/products/indesignserver/faq.html
如果我使用Indesign的桌面版本作为服务器引擎?
是的,Indesign桌面版本的EULA不允许
它用作服务器引擎来为自动发布解决方案供电
由他人共享。使用Indesign桌面进行脚本限制在于
购买了订阅的指定用户。
由于您使用的是颤动,因此您需要存储要重新渲染的值已更新,然后在 build
方法中从那里渲染。
我建议在
通常,任何现代编译器都应为诸如此类的琐碎示例生成相同的机器代码。只需观看任何编译器(例如GCC)的拆卸,启用优化并亲自查看即可。 :
#include <stdbool.h>
int example1 (bool something)
{
if(something == true)
return -1;
else
return 0;
}
int example2 (bool something)
{
if(something == true)
return -1;
return 0;
}
int example3 (bool something)
{
return something==true ? -1 : 0;
}
int example4 (bool something)
{
for(int i=something; i!=false; i++)
{
if(i)
return -1;
}
return 0;
}
https://godbolt.org/z/1kxxxsbj9s
示例 同一机器代码,甚至是人为的示例4:
movzx eax, dil
neg eax
ret
也就是说,抓住输入参数并将其替换为两者的补充( neg
),意思是 1
- &gt; -1
或 0
- &gt; 0
。
优化器还没有生成任何分支(条件执行路径),这会使所有高端CPU上的代码较慢。
因此,使用哪种形式主要是一种样式问题。各种安全标准(ISO 61508,ISO 26262,MISRA C等)在一个功能中倾向于在多个返回
上皱眉,因此,如果您关心的话, xpecond> example3 可能可能实际上是最好的。
尝试此代码。它不依赖 QVBoxLayout
,但基本上与此布局相同。它隐藏了该地区以外的儿童小部件。没有部分可见的小部件。
from PyQt5 import QtWidgets
class Container(QtWidgets.QWidget):
_spacing = 5
def __init__(self, parent=None):
super().__init__(parent)
y = self._spacing
for i in range(40):
button = QtWidgets.QPushButton("Button" + str(i + 1), self)
button.move(self._spacing, y)
y += button.sizeHint().height() + self._spacing
def resizeEvent(self, event):
super().resizeEvent(event)
for child in self.children():
if isinstance(child, QtWidgets.QWidget):
child.resize(self.width() - 2 * self._spacing, child.height())
child.setVisible(child.geometry().bottom() < self.height())
app = QtWidgets.QApplication([])
w = Container()
w.resize(500, 500)
w.show()
app.exec_()
请注意,实际上不是添加 nor 动态删除窗口小部件,这将是更多的代码,并且可能非常取决于您的特定用例。此外,感觉是一种过早的优化。除非您确实需要它,否则请不要这样做。
更新:
我尝试了上面的代码,并提出了一些改进。我特别想让它对儿童小部件的变化做出反应。问题在于,如果子小部件更改其大小,则必须重新使用父容器。上面的代码不会以任何方式做出反应。为了使其响应迅速,我们需要对 layoutrequest
事件做出反应。请注意,在下面的代码中,我创建了三种类型的按钮 - 一个按钮添加了一条线,另一个可以增加字体大小,而另一个则减小了字体大小。
from PyQt5 import QtCore, QtWidgets
def changeFontSize(increment):
font = QtWidgets.QApplication.font()
font.setPointSize(font.pointSize() + increment)
QtWidgets.QApplication.setFont(font)
class Container(QtWidgets.QWidget):
_spacing = 5
_children = [] # maintains the order of creation unlike children()
def __init__(self, parent=None):
super().__init__(parent)
for i in range(100):
child = QtWidgets.QPushButton(self)
child.installEventFilter(self)
# these are just to test various changes in child widget itself to force relayout
r = i % 3
if r == 0:
text = "New line"
onClicked = lambda state, w=child: w.setText(w.text() + "\nclicked")
elif r == 1:
text = "Bigger font"
onClicked = lambda: changeFontSize(1)
elif r == 2:
text = "Smaller font"
onClicked = lambda: changeFontSize(-1)
child.setText(text)
child.clicked.connect(onClicked)
self._children.append(child)
def resizeEvent(self, event):
super().resizeEvent(event)
self._relayout()
def event(self, event):
if event.type() == QtCore.QEvent.LayoutRequest:
self._relayout()
return super().event(event)
def _relayout(self):
y = self._spacing
for child in self._children:
h = child.sizeHint().height()
child.move(self._spacing, y)
child.resize(self.width() - 2 * self._spacing, h)
y += h + self._spacing
child.setVisible(y < self.height())
app = QtWidgets.QApplication([])
w = Container()
w.resize(500, 500)
w.show()
app.exec_()
此代码令人满意,但是并不完美。我已经观察到,当重新划分容器并且某些儿童小部件会更改其可见性状态时,重新涂层会再次调用。这不是需要的,但是我没有发现如何防止它。
也许有更好的方法...
请将helpers.py也复制到工作目录中。
COPY helpers.py .
或者
ADD . /app
#This will add all files in the current local dir to /app
在您的动态上,请检查某些内容,并确保报告在当前记录上运行
如果在所有相关记录的运行中设置了它,请在您的解决方案中删除报告并再次添加(最好是用一个新名称只需在名称的末尾添加_v2或_v3并再次设置。我相信动态CRM有一个错误。
简而言之:
import pandas as pd
# ...
pd.set_option('mode.chained_assignment', None)
您应该使用Packer.toblob使用第三个选项,并在Promise Packer.toblob(即将解决)后才调用一次zip.generateasync。
zip存档的哑光型应该是应用/zip(默认值,您不能传递此参数)
Packer.toBlob(doc).then(blob => {
word?.file(
`${forword.headerName}.rtf`,
blob,
{ binary: true }
);
zip.generateAsync({type:"blob",compression: "DEFLATE" })
.then(content => FileSaver.saveAs(content, `examples.zip`));
);
我认为这仅仅是因为数据框中有列 x
,而 filter
是使用此 x
而不是参数 x
到您的在线功能。如果您在函数声明中将变量名从 x
更改为 z
,我认为它有效。请参阅下面。
尽管如此,我认为这是对 iris |&gt的基本管道的罢工。滤波器(完整。Cases(_))
引发错误。 _
只能用作管道函数的命名参数,并且不能用作。
可以用作变量的限制?
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
complete_data_native_wrong <- function(data){
res <- data |> (\(z) filter(z, complete.cases(z)))() # change to z
return(res)
}
df <- structure(
list(x = c(1, 2, NA, 4),
y = c(NA, NA, 3, 4)),
class = c("tbl_df",
"tbl", "data.frame"),
row.names = c(NA, -4L)
)
df |> complete_data_native_wrong()
#> # A tibble: 1 × 2
#> x y
#> <dbl> <dbl>
#> 1 4 4
由
它将按照您想要的 来工作
const checkIfUserThere = () => {
let newUser = "[email protected]";
for (const data of users) {
if (data.email === newUser) {
return true;
}
}
return false;
};
var parentDiv = document.getElementsByClassName("catColumn")[0];
parentDiv.addEventListener("click",function(e){
let current= e.target;
var collapse = document.getElementsByClassName("collapsible");
let toExpand = !current.nextElementSibling.style.maxHeight ;
for (let i = 0; i < collapse.length; i++) {
var content = collapse[i].nextElementSibling;
if (content.style.maxHeight) {
content.style.maxHeight = null;
collapse[i].classList.toggle("activeCollapse");
}
}
let toToggle = current.nextElementSibling;
if(toExpand ){
toToggle.style.maxHeight = content.scrollHeight + "px";
current.classList.toggle("activeCollapse");
}
});
.catColumn {
width: 400px;
margin: 0 auto;
}
.collapsible {
width: 100%;
padding: 14px 8px;
margin-top: 10px;
color: #5a2e0f;
background-color: #fff;
border: 1px solid #c1bfbf;
outline: none;
border-radius: 6px;
}
.collapsible:hover {
background-color: #efdac6;
}
.collapsible:after {
float: right;
content: '\002B';
color: #5a2e0f;
font-size: 1.8em;
margin-left: 5px;
cursor: pointer;
line-height: 26px;
}
.activeCollapse {
background-color: #efdac6;
border-radius: 0;
border-bottom: 0px;
}
.activeCollapse:after {
content: "\2212";
}
/**/
ul.subcats {
width: 100%;
max-height: 0;
transition: max-height 1s ease-out;
overflow: hidden;
font-size: 13px;
}
ul.subcats li {
padding: 12px;
}
<div class="catColumn">
<div class="collapsible">cat1</div>
<ul class="subcats">
<li>subcat1</li>
<li>subcat2</li>
</ul>
<div class="collapsible">cat2</div>
<ul class="subcats">
<li>subcat3</li>
<li>subcat4</li>
</ul>
</div>
除@TJ Crowder的答案外,
您的示例项目还以&lt; strictmode&gt;
运行,因此React将在 dev 模式下两次运行一个组件来验证事物。要了解问题,首先让我们从 index.js
暂时删除&lt; scrictmode
基本上,我需要的是usecallbacks,因为普通组件没有
通过相同的道具重新渲染。那我想念什么?备忘录
有帮助以优化?
通过使用备忘录
,您告诉对帐算法,如果道具相同,请不要下降并再次渲染子组件。但是在没有备忘录
的普通组件中,对帐算法将穿越树并调用您的子组件(因为那是算法应该做的)。一旦完成遍历(渲染),React将把更改与DOM冲洗。由于没有任何更改会对DOM进行。但是,使用备忘
您正在加快遍历过程。
注:
在React中,'渲染'并不意味着更新DOM元素。渲染是指调用您的函数组件或component.render()方法。这不是一个昂贵的过程,因此React会这样做,但是React不会盲目地将变化冲洗给DOM。您可以通过打开检查元素来验证这一点。当您展开检查元素时,单击按钮,您将不会看到任何更改(创建/删除DOM元素上的紫色颜色亮点的动画)会发生。
通过使用备忘录,您可以手动停止渲染()并移至兄弟姐妹(如果有)继续重新渲染而不是进入子元素。这也是为什么您不能使用 console.log
实际测试React应用程序的性能。
console.log
是副作用。严格地告诉您不要为渲染阶段(功能主体的最高级别)添加副作用。 您需要使用使用
。
要处理副作用, 重新加载预览,我们将在控制台上获取以下日志,
对于此组件,
<div className="App">
ref: <Child txt="ref" fn={handlerOfWhoKnows} />
useCB: <Child txt="useCb" fn={useCallback(handlerOfWhoKnows, [])} />
memo: <MemoChild txt="memo" fn={handlerOfWhoKnows} />
memo + useCB: <MemoChild txt="memo+useCb" fn={useCallback(handlerOfWhoKnows, [])} />
</div>
它将在MOUTE上登录
ref rendered!
useCb rendered!
memo rendered!
memo+useCb rendered!
ref rendered!
useCb rendered!
memo rendered!
memo+useCb rendered!
1。在坐骑上登录两次,
这是您看到每个日志打印两次的原因,您使用 pers a
使用>
在您的&lt; child/&gt;
组件中。
useEffect(() => {
setState((state) => state + 1);
}, [fn]);
由于触发了状态变化,因此第二次也将在第二次运行&lt; child /&gt; < /code>。它与道具无关。如果我们删除此
useffect
,现在您可以将安装log看到为
ref rendered!
useCb rendered!
memo rendered!
memo+useCb rendered!
单击按钮。
2。在孩子中删除 strictmmode
stricteffect 后 ,然后单击按钮。这次将打印
ref rendered! // rendered due to the prop changed
useCb rendered! // rendered due to the prop changed
memo rendered! // rendered due to the prop changed
这次您可以看到的日志, MEMO+USECB
未打印。下一个问题是为什么,
3。为什么在第二步中呈现备忘录!
。
这是因为您没有回忆 fn
,因此每次渲染时都会重新创建。因此,道具变更 - &gt;组件重新渲染,
因此,
const handlerOfWhoKnows = useCallback(() => {}, []);
<MemoChild txt="memo" fn={handlerOfWhoKnows} />
随着更改,代码应该看起来像是
const handlerOfWhoKnows = useCallback(() => {}, []);
return (
<div className="App">
ref: <Child txt="ref" fn={handlerOfWhoKnows} />
useCB: <Child txt="useCb" fn={handlerOfWhoKnows} />
memo: <MemoChild txt="memo" fn={handlerOfWhoKnows} />
memo + useCB: <MemoChild txt="memo+useCb" fn={handlerOfWhoKnows} />
</div>
);
现在,当我们单击按钮时,我们只会看到
ref rendered!
useCb rendered!
,所以您的问题的答案,
何时备忘录以优化?
如果道具相同,备忘录有助于手动停止进一步的渲染。一旦看到备忘录
,对帐算法将停止遍历,道具相同。它将完成渲染树,否则将继续渲染兄弟姐妹。
同样,使用备忘录太多也可能导致性能问题,因为备忘
它会做一些过程来弄清楚是否渲染孩子。使用 usecallback
和 usememo
仔细。
您的会话
导入是错误的。用 android.se.omapi.session
javax.mail.mail.session
替换导入。如果这会导致其他问题,因为您需要两个导入,那么对于其中一个就需要使用完全合格的名称。例如:
javax.mail.Session session = javax.mail.Session.getDefaultInstance(properties, null);
另一个问题是 uri
参数。没有 Mimemessage
构造函数,它可以采用 uri
或 uri
参数。我认为您有现有消息作为文件,并且想从中阅读。您需要将 uri
转换为 inputstream
。我在。我会看看您是否可以完全摆脱 uri
参数,并用 inputStream
或可以将其转换为 InputStream
的东西替换。 。
好吧,对于这个问题,循环将有助于游戏更具动态性,使玩家能够直到玩家退出游戏为止。我还将您的代码的部分集成到了该修订后的部分中。希望这会有所帮助
Well, for this question a while loop would help the game be more dynamic, allowing the player to until the player opt-out of the game. I also integrated parts of your code into this revised one. Hope this helps
我需要在此岩纸仪代码中做什么?