반응형
플러터에 있는 연산자 == 방법은 무엇입니까?
문서에 따라 다음과 같이 구현됩니다
@override
bool operator ==(Object other) {
if (identical(this, other))
return true;
if (other.runtimeType != runtimeType)
return false;
return other is BoxShadow
&& other.color == color
&& other.offset == offset
&& other.blurRadius == blurRadius
&& other.spreadRadius == spreadRadius;
}
그리고 그 재산은 다음과 같다
@override
int get hashCode => hashValues(color, offset, blurRadius, spreadRadius);
이것은 실제로 무엇을 하는가? 그리고 그것은 어디에서 유용한가? 코드에서 , 등의 목적은 무엇입니까? 몇 가지 예를 더 간단한 용어로 제공해 주시면 감사하겠습니다.
이 연산자는 두 객체/클래스의 실제 값을 비교해야 할 때 유용합니다. 왜냐하면 기본적으로 flalling 객체의 인스턴스를 비교하며, 이 경우 두 객체의 실제 값이 동일하더라도 결코 동일하지 않기 때문입니다,
예를 들어 ~다음 예제를 실행합니다
플러터 기본 케이스:
void main() {
Person p1 = Person("StackOverFlow");
Person p2 = Person("StackOverFlow");
print("Both Classes are same: ${p1 == p2}"); // <- print 'false'
}
class Person {
String name;
Person(this.name);
}
재정의 경우:
void main() {
Person p1 = Person("StackOverFlow");
Person p2 = Person("StackOverFlow");
print("Both Classes are same: ${p1 == p2}"); // <- print 'true'
}
class Person {
String name;
Person(this.name);
@override
bool operator ==(Object other) {
return (other is Person) && other.name == name;
}
}
그리고 더 자세한 내용은 이것을 읽어라.
키워드는 특수 기호 함수를 지정합니다. 예를 들어, 더하기의 경우 '+', 같음의 경우 '=='입니다.
Dart에서 객체는 속성이 동일하더라도 서로 같지 않습니다. 왜냐하면 Dart는 Dart가 자동으로 딥 이퀄리티(객체의 각 속성을 검사하는 과정)를 수행하지 않고 인스턴스가 별도이기 때문이다.
이 경우 연산자는 기본 동일성 검사를 재정의하고 심층 동일성 검사를 수행하며 런타임 유형(예: 또는 )이 동일한지 확인합니다. 어떤 코드든 평등하게 실행될 수 있지만 더 많은 평등 검사 이외의 다른 것을 실행하는 것은 좋지 않습니다. 해시 코드 오버라이드는 동일 연산자를 오버라이드할 때 필요한데, Dart가 이를 내부적으로 사용하여 다른 동일 연산을 수행하기 때문이다.
반응형
'개발하자' 카테고리의 다른 글
svelt 스토어 내에서 반응성 $ 변수를 참조하는 방법은 무엇입니까? (0) | 2023.03.21 |
---|---|
펄럭임/안드로이드: [...] 활동이 있지만 'android:exported' 속성이 없는 APK를 업로드했습니다. exported="true"가 작동하지 않음 (0) | 2023.03.20 |
Jupyter/Jupyter Lab 노트북에 목차를 추가하려면 어떻게 해야 합니까? (0) | 2023.03.19 |
개발 모드에서 Svelte-kit에서 프록시하는 방법 (0) | 2023.03.19 |
응답이 Fast의 POST 응답을 표시하지 않음API 백엔드 애플리케이션 (0) | 2023.03.18 |