我有一些我正在与之抗争的代码.这是一个小辅助函数,它应该返回一个Vec<&str>调用函数.但是,我似乎无法让生命保持正确.
这是代码片段:
fn take_symbol<'a>(ch: &'a str, current: &'a mut String) -> &'a mut TokenList<'a> {
let out = TokenList::<'a>::new();
out.push(current.as_str());
out.push(ch);
*current = String::new();
&mut out
}
Run Code Online (Sandbox Code Playgroud)
编译器告诉我:error: 'out' does not live long enough并且引用必须在生命周期内有效'a,但它看起来像是为它定义的'a.
我也尝试将其更改为:
let out = &mut TokenList::<'a>::new();
Run Code Online (Sandbox Code Playgroud)
这不会改变任何错误消息.要么:
let out = &'a mut TokenList::<'a>::new();
Run Code Online (Sandbox Code Playgroud)
编译器完全不喜欢它.
如何定义out一生'a?
有关更多详细信息,请参阅我对TokenList的定义:
pub type Token<'a> = &'a str;
pub type TokenList<'a> = Vec<Token<'a>>;
Run Code Online (Sandbox Code Playgroud) 我正在使用Spring-Batch v3.0.0进行批量导入.有一个StepScope和一个JobScope.我怎么知道哪一个合适?
例如,如果我定义一个自定义ItemReader或ItemWriter应该使用特定的自定义EntityManager,它可能如下所示:
@Bean
@Scope("step") //@Scope("job") //custom scope required to inject #jobParameters
public JpaItemWriter<T> jpaItemWriter(EntityManagerFactory emf) {
JpaItemWriter<T> writer = new JpaItemWriter<T>();
writer.setEntityManagerFactory(emf);
return writer;
}
Run Code Online (Sandbox Code Playgroud)
但是哪个范围就在这里?为什么?
带step范围的执行有效,但我觉得itemWrite应该是job范围的,这样它们就不会在每一步都重新创建.
我尝试切换step到job,但是会抛出以下错误:
Exception in thread "main" java.lang.IllegalStateException: No Scope registered for scope 'job'
我正在Rust写一个NGram库.我想创建一个'通用'ngram,其中大小不需要在编译时确定(与我编码时相反).一些小代码可能有助于说清楚.
这基本上是我想要做的:
pub type Ngram<N> = Vec<[String; N]>;
Run Code Online (Sandbox Code Playgroud)
然后使用它,你只需要做这样的事情:
let vec = Ngram::<5>::new();
Run Code Online (Sandbox Code Playgroud)
你会创造一个5克(或更准确地说,a Vec<[String; 5]>).这样的事情是可能的.我真的不想做这样的事情:
pub type Ngram<N> = Vec<N>;
...
let vec = Ngram::<[String; 5]>::new();
Run Code Online (Sandbox Code Playgroud)
这大多会破坏创建类型的目的.
出于某种原因,我的 OpenGL 库文件没有为 Visual Studio 2013 正确链接。
这是我的所有代码:
#include <gl\glew.h>
#include <GL\GL.h>
#include <GL\GLU.h>
#include <GL\freeglut.h>
#include <iostream>
#include <cstdlib>
#pragma comment( lib, "OpenGL32.lib" )
#pragma comment( lib, "glu32.lib" )
#pragma comment( lib, "freeglut.lib" )
void init( void );
void display( void );
int main( int argc, char* argv[] )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA );
glutInitWindowSize( 512, 512 );
glutInitContextVersion( 4, 0 );
glutInitContextProfile( GLUT_CORE_PROFILE );
glutCreateWindow( argv[0] );
glutDisplayFunc( display );
glutMainLoop();
return EXIT_SUCCESS;
}
void …Run Code Online (Sandbox Code Playgroud)