녹-구조
배열은 값의 동종 컬렉션을 나타내는 데 사용됩니다. 마찬가지로 구조는 Rust에서 사용할 수있는 또 다른 사용자 정의 데이터 유형으로, 다른 구조를 포함하여 다른 유형의 데이터 항목을 결합 할 수 있습니다. 구조는 데이터를 키-값 쌍으로 정의합니다.
구문-구조 선언
구조체의 키워드는 구조를 선언하는 데 사용됩니다. 구조는 정적으로 유형이 지정되므로 구조의 모든 필드는 데이터 유형과 연관되어야합니다. 구조에 대한 명명 규칙 및 규칙은 변수와 비슷합니다. 구조 블록은 세미콜론으로 끝나야합니다.
struct Name_of_structure {
field1:data_type,
field2:data_type,
field3:data_type
}
구문-구조 초기화
구조체를 선언 한 후 각 필드에 값을 할당해야합니다. 이것을 초기화라고합니다.
let instance_name = Name_of_structure {
field1:value1,
field2:value2,
field3:value3
};
//NOTE the semicolon
Syntax: Accessing values in a structure
Use the dot notation to access value of a specific field.
instance_name.field1
Illustration
struct Employee {
name:String,
company:String,
age:u32
}
fn main() {
let emp1 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
println!("Name is :{} company is {} age is {}",emp1.name,emp1.company,emp1.age);
}
위의 예는 이름, 회사 및 연령 유형의 세 필드가있는 구조체 Employee를 선언합니다. main ()은 구조를 초기화합니다. 그것은 println을 사용합니다! 매크로는 구조에 정의 된 필드의 값을 인쇄합니다.
산출
Name is :Mohtashim company is TutorialsPoint age is 50
구조체 인스턴스 수정
인스턴스를 수정하려면 인스턴스 변수를 변경 가능으로 표시해야합니다. 아래 예제는 Employee 라는 구조를 선언하고 초기화 하고 나중에 age 필드의 값 을 50에서 40으로 수정합니다 .
let mut emp1 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
emp1.age = 40;
println!("Name is :{} company is {} age is
{}",emp1.name,emp1.company,emp1.age);
산출
Name is :Mohtashim company is TutorialsPoint age is 40
함수에 구조체 전달
다음 예제는 struct의 인스턴스를 매개 변수로 전달하는 방법을 보여줍니다. 표시 메서드는 Employee 인스턴스를 매개 변수로 사용하고 세부 정보를 인쇄합니다.
fn display( emp:Employee) {
println!("Name is :{} company is {} age is
{}",emp.name,emp.company,emp.age);
}
여기에 완전한 프로그램이 있습니다-
//declare a structure
struct Employee {
name:String,
company:String,
age:u32
}
fn main() {
//initialize a structure
let emp1 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
let emp2 = Employee{
company:String::from("TutorialsPoint"),
name:String::from("Kannan"),
age:32
};
//pass emp1 and emp2 to display()
display(emp1);
display(emp2);
}
// fetch values of specific structure fields using the
// operator and print it to the console
fn display( emp:Employee){
println!("Name is :{} company is {} age is
{}",emp.name,emp.company,emp.age);
}
산출
Name is :Mohtashim company is TutorialsPoint age is 50
Name is :Kannan company is TutorialsPoint age is 32
함수에서 구조체 반환
두 명의 직원의 나이를 비교하고 노인을 반환 하는 함수 who_is_elder ()를 고려해 보겠습니다 .
fn who_is_elder (emp1:Employee,emp2:Employee)->Employee {
if emp1.age>emp2.age {
return emp1;
} else {
return emp2;
}
}
여기에 완전한 프로그램이 있습니다-
fn main() {
//initialize structure
let emp1 = Employee{
company:String::from("TutorialsPoint"),
name:String::from("Mohtashim"),
age:50
};
let emp2 = Employee {
company:String::from("TutorialsPoint"),
name:String::from("Kannan"),
age:32
};
let elder = who_is_elder(emp1,emp2);
println!("elder is:");
//prints details of the elder employee
display(elder);
}
//accepts instances of employee structure and compares their age
fn who_is_elder (emp1:Employee,emp2:Employee)->Employee {
if emp1.age>emp2.age {
return emp1;
} else {
return emp2;
}
}
//display name, comapny and age of the employee
fn display( emp:Employee) {
println!("Name is :{} company is {} age is {}",emp.name,emp.company,emp.age);
}
//declare a structure
struct Employee {
name:String,
company:String,
age:u32
}
산출
elder is:
Name is :Mohtashim company is TutorialsPoint age is 50
구조 방법
메서드는 함수와 같습니다. 프로그래밍 명령어의 논리적 그룹입니다. 메소드는fn예어. 메서드의 범위는 구조 블록 내에 있습니다.
메서드는 구조 블록 외부에서 선언됩니다. 그만큼impl키워드는 구조의 컨텍스트 내에서 메소드를 정의하는 데 사용됩니다. 메서드의 첫 번째 매개 변수는 항상self, 구조의 호출 인스턴스를 나타냅니다. 메서드는 구조의 데이터 멤버에 대해 작동합니다.
메서드를 호출하려면 먼저 구조를 인스턴스화해야합니다. 이 메서드는 구조의 인스턴스를 사용하여 호출 할 수 있습니다.
통사론
struct My_struct {}
impl My_struct {
//set the method's context
fn method_name() {
//define a method
}
}
삽화
다음 예제는 width 및 height 필드가 있는 구조 Rectangle 을 정의합니다 . 메서드 영역 은 구조의 컨텍스트 내에서 정의됩니다. area 메서드는 self 키워드 를 통해 구조의 필드에 액세스하고 직사각형의 면적을 계산합니다.
//define dimensions of a rectangle
struct Rectangle {
width:u32, height:u32
}
//logic to calculate area of a rectangle
impl Rectangle {
fn area(&self)->u32 {
//use the . operator to fetch the value of a field via the self keyword
self.width * self.height
}
}
fn main() {
// instanatiate the structure
let small = Rectangle {
width:10,
height:20
};
//print the rectangle's area
println!("width is {} height is {} area of Rectangle
is {}",small.width,small.height,small.area());
}
산출
width is 10 height is 20 area of Rectangle is 200
구조의 정적 방법
정적 메서드는 유틸리티 메서드로 사용할 수 있습니다. 이러한 메서드는 구조가 인스턴스화되기 전에도 존재합니다. 정적 메서드는 구조의 이름을 사용하여 호출되며 인스턴스없이 액세스 할 수 있습니다. 일반 메소드와 달리 정적 메소드는 & self 매개 변수를 사용 하지 않습니다 .
구문-정적 메서드 선언
함수 및 기타 메소드와 같은 정적 메소드는 선택적으로 매개 변수를 포함 할 수 있습니다.
impl Structure_Name {
//static method that creates objects of the Point structure
fn method_name(param1: datatype, param2: datatype) -> return_type {
// logic goes here
}
}
구문-정적 메서드 호출
structure_name :: 구문 정적 메소드를 액세스하기 위해 사용된다.
structure_name::method_name(v1,v2)
삽화
다음 예제에서는 getInstance 메서드를 Point 구조의 인스턴스를 만들고 반환하는 팩토리 클래스로 사용합니다 .
//declare a structure
struct Point {
x: i32,
y: i32,
}
impl Point {
//static method that creates objects of the Point structure
fn getInstance(x: i32, y: i32) -> Point {
Point { x: x, y: y }
}
//display values of the structure's field
fn display(&self){
println!("x ={} y={}",self.x,self.y );
}
}
fn main(){
// Invoke the static method
let p1 = Point::getInstance(10,20);
p1.display();
}
산출
x =10 y=20