我有一个HTML文本输入<input type="text" />,用户输入一个字符串.由于它是文本输入而不是文本区域,因此用户无法输入换行符.
用户可以在文本输入中输入Markdown元素,以便在以后重新显示数据时格式化数据.但是,它们的选项有限,因为它们无法输入换行符(例如标题,列表).
最后,不允许用户在字段中输入HTML元素(用于防止XSS攻击),因此他们无法<br/>在文本输入中输入元素.
我想知道Markdown中是否有一种方法可以模拟单行文本输入字段中的换行符,当以后重新显示为格式化文本时,它将显示为换行符或换行符.
示例(假设@cr在Markdown中表示此所需的换行标记):
输入: #A Header @cr ##A Subheader @cr Some text
输出:
一些文字
我试图了解你如何返回非原语(即没有实现的类型Copy).如果返回类似a的内容i32,则该函数会在内存中创建一个带有返回值副本的新值,因此可以在函数范围之外使用它.但是如果您返回的类型没有实现Copy,则不会执行此操作,并且您将获得所有权错误.
我已经尝试使用Box在堆上创建值,以便调用者可以获取返回值的所有权,但这似乎也不起作用.
也许我通过使用我在C#或其他语言中使用的相同编码样式以错误的方式接近它,其中函数返回值,而不是将对象引用作为参数传递并对其进行变更,以便您可以轻松指示所有权在Rust.
以下代码示例无法编译.我相信问题只在迭代器闭包内,但我已经包含了整个函数,以防万一我没有看到.
pub fn get_files(path: &Path) -> Vec<&Path> {
let contents = fs::walk_dir(path);
match contents {
Ok(c) => c.filter_map(|i| { match i {
Ok(d) => {
let val = d.path();
let p = val.as_path();
Some(p)
},
Err(_) => None } })
.collect(),
Err(e) => panic!("An error occurred getting files from {:?}: {}", pa
th, e)
}
}
Run Code Online (Sandbox Code Playgroud)
编译器给出以下错误(我已删除所有行号和无关文本):
error: `val` does not live long enough
let p = val.as_path();
^~~ …Run Code Online (Sandbox Code Playgroud) 我有一个队列,在添加项目时总是需要准备好处理项目.在队列中的每个项目上运行的函数创建并启动线程以在后台执行操作,以便程序可以执行其他操作.
但是,我调用队列中每个项目的函数只是启动线程然后完成执行,无论它开始完成的线程是什么.因此,在程序处理完最后一项之前,循环将移动到队列中的下一项.
这是代码,以更好地展示我想要做的事情:
queue = Queue.Queue()
t = threading.Thread(target=worker)
t.start()
def addTask():
queue.put(SomeObject())
def worker():
while True:
try:
# If an item is put onto the queue, immediately execute it (unless
# an item on the queue is still being processed, in which case wait
# for it to complete before moving on to the next item in the queue)
item = queue.get()
runTests(item)
# I want to wait for 'runTests' to complete before moving past this point
except Queue.Empty, …Run Code Online (Sandbox Code Playgroud)