다음 예제에서 필자는 필드 선언에서 구조체의 각 필드에 값을 할당하는 것을 선호합니다. 또는 각 필드에 대해 하나의 추가 문을 사용하여 필드에 값을 할당합니다. 내가 할 수있는 것은 구조체가 인스턴스화 될 때 기본값을 할당하는 것뿐입니다.
더 간결한 방법이 있습니까?
struct cParams {
iInsertMax: i64,
iUpdateMax: i64,
iDeleteMax: i64,
iInstanceMax: i64,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}
impl cParams {
fn new() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
답변
트레이 트를 구현하여 구조체에 대한 기본값을 제공 할 수 있습니다 Default
. default
기능은 현재처럼 보일 것입니다 new
기능 :
impl Default for cParams {
fn default() -> cParams {
cParams {
iInsertMax: -1,
iUpdateMax: -1,
iDeleteMax: -1,
iInstanceMax: -1,
tFirstInstance: false,
tCreateTables: false,
tContinue: false,
}
}
}
그런 다음 기본값이 아닌 값만 제공하여 구조체를 인스턴스화 할 수 있습니다.
let p = cParams { iInsertMax: 10, ..Default::default() };
데이터 구조를 약간 변경하면 자동으로 파생 된 기본 구현을 활용할 수 있습니다. 당신이 사용하는 경우 #[derive(Default)]
데이터 구조에, 컴파일러는 자동으로 기본 값으로 각 필드를 채우고 당신을위한 기본 기능을 생성합니다. 기본 부울 값은 false이고 기본 정수 값은 0입니다.
정수 필드가 기본적으로 -1이되기를 원하기 때문에 정수의 기본값이 0이면 문제가됩니다. 기본값 -1을 구현하는 새 유형을 정의하고 대신 사용할 수 있습니다.i64
구조체 있습니다. (나는 그것을 테스트하지 않았지만 작동합니다).
그러나, 나는 약간의 데이터 구조를 변경하고 사용하는 것이 좋을 것 Option<i64>
대신에 i64
. 코드의 컨텍스트를 모르지만 “무한”또는 “최대가 없습니다”라는 특별한 의미를 나타 내기 위해 특수 값 -1을 사용하는 것 같습니다. Rust에서는를 사용 Option
하여 선택적으로 현재 가치를 나타냅니다. -1 해킹이 필요하지 않습니다. 옵션은 None
또는 Some(x)
x가 i64
여기에 있는 곳일 수 있습니다. -1이 유일한 음수 값이면 부호없는 정수일 수도 있습니다. 기본값 Option
은 None
이므로 제안 된 변경 사항에 따라 코드는 다음과 같을 수 있습니다.
#[derive(Default)]
struct cParams {
iInsertMax: Option<u64>,
iUpdateMax: Option<u64>,
iDeleteMax: Option<u64>,
iInstanceMax: Option<u64>,
tFirstInstance: bool,
tCreateTables: bool,
tContinue: bool,
}
let p = cParams { iInsertMax: Some(10), ..Default::default() };