diff --git a/pages/move_language_basic/_meta.json b/pages/move_language_basic/_meta.json index 52f2e0b..4f526cc 100644 --- a/pages/move_language_basic/_meta.json +++ b/pages/move_language_basic/_meta.json @@ -14,10 +14,6 @@ "vector" : "Vector", "address" : "Address", "maps" : "Maps", - "hash_function" : "Hash Functions", - "references" : "References", "unit_test" : "Unit Test", - "generics" : "Generics", - "type_arguments" : "Type Arguments", - "type_inference" : "Type Inference" + "generics" : "Generics" } diff --git a/pages/move_language_basic/hash_function.mdx b/pages/move_language_basic/hash_function.mdx deleted file mode 100644 index e498e77..0000000 --- a/pages/move_language_basic/hash_function.mdx +++ /dev/null @@ -1,53 +0,0 @@ -# Hash Function - -## `std::hash` - -`sha2_256` and `sha3_256` are available in `std::hash`: - -```rust -module my_addrx::Hashing -{ - use std::hash; - use std::bcs; - use std::debug::print; - - fun hashing_in_move():vector - { - let x:vector = bcs::to_bytes(&10); - let h = hash::sha2_256(x); - h - } - - #[test] - fun testing() - { - let tmp=hashing_in_move(); - print(&tmp); - } -} -``` - -## `std::aptos_hash` -- `keccak256`, `sha2_512` ,`sha3_512` ,`ripemd160` are available in `std::aptos_hash` -```rust -module std::Hashing -{ - use std::aptos_hash; - use std::bcs; - use std::debug::print; - - fun hashing_in_move():vector - { - let x:vector = bcs::to_bytes(&10); - let h = aptos_hash::keccak256(x); - h - } - - #[test] - fun testing() - { - let tmp=hashing_in_move(); - print(&tmp); - } -} -``` diff --git a/pages/move_language_basic/references.mdx b/pages/move_language_basic/references.mdx deleted file mode 100644 index ae24ba0..0000000 --- a/pages/move_language_basic/references.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# References - -... Update diff --git a/pages/move_language_basic/type_arguments.mdx b/pages/move_language_basic/type_arguments.mdx deleted file mode 100644 index 99c7056..0000000 --- a/pages/move_language_basic/type_arguments.mdx +++ /dev/null @@ -1,74 +0,0 @@ -# Type Arguments - - -## Calling Generic Function -- Khi gọi một function generic, bạn có thể chỉ định các type arguments cho các type parameters của function trong một danh sách được bao bởi một cặp dấu ngoặc nhọn. - -```rust -fun foo() { - let x = id(true); -} -``` -- Nếu bạn không chỉ định các type arguments, Move's type inference sẽ cung cấp chúng cho bạn. - -## Using Generic Structs -- Tương tự, bạn có thể đính kèm một danh sách các type arguments cho các type parameters của structs khi khởi tạo hoặc hủy bỏ các giá trị của các generic types. - -```rust -fun foo() { - let foo = Foo { x: true }; - let Foo { x } = foo; -} -``` - -## Type Argument Mismatch -- Nếu bạn chỉ định các đối số kiểu và chúng không khớp với các giá trị thực tế được cung cấp, sẽ xảy ra lỗi: -```rust -fun foo() { - let x = id(true); // error! true is not a u64 -} -``` - -```rust -fun foo() { - let foo = Foo { x: 0 }; // error! 0 is not a bool - let Foo
{ x } = foo; // error! bool is incompatible with address -} -``` - -# Unused Type Parameters -- Đối với định nghĩa structs, một type parameter không sử dụng là tham số không xuất hiện trong bất kỳ trường nào được định nghĩa trong struct, nhưng vẫn được kiểm tra tĩnh tại thời điểm biên dịch. Move cho phép các tham số kiểu không sử dụng, vì vậy định nghĩa cấu trúc sau là hợp lệ: - -```rust -struct Foo { - foo: u64 -} -``` - -- Điều này có thể tiện lợi khi mô hình hóa (modeling) các khái niệm nhất định. Dưới đây là một ví dụ: -```rust -module my_addrx::M{ - // Currency Specifiers - struct Currency1 {} - struct Currency2 {} - - // A generic coin type that can be instantiated using a currency - // specifier type. - // e.g. Coin, Coin etc. - struct Coin has store { - value: u64 - } - - // Write code generically about all currencies - public fun mint_generic(value: u64): Coin { - Coin { value } - } - - // Write code concretely about one currency - public fun mint_concrete(value: u64): Coin { - Coin { value } - } -} -``` - -- Trong ví dụ này, cấu trúc `Coin` là generic với tham số kiểu `Currency`, điều này chỉ định loại tiền tệ của đồng tiền và cho phép mã được viết theo kiểu tổng quát cho bất kỳ loại tiền tệ nào hoặc cụ thể cho một loại tiền tệ nhất định. Tính tổng quát này vẫn áp dụng ngay cả khi tham số kiểu Currency không xuất hiện trong bất kỳ trường nào được định nghĩa trong Coin. diff --git a/pages/move_language_basic/type_inference.mdx b/pages/move_language_basic/type_inference.mdx deleted file mode 100644 index 259b554..0000000 --- a/pages/move_language_basic/type_inference.mdx +++ /dev/null @@ -1,42 +0,0 @@ -# Type Inference -- Trong hầu hết các trường hợp, trình biên dịch Move sẽ có khả năng suy luận các type arguments, vì vậy bạn không cần phải viết chúng một cách rõ ràng. Dưới đây là những gì các ví dụ trên sẽ trông như thế nào nếu chúng ta bỏ qua các đối số kiểu: -```rust -fun foo() { - let x = id(true); - // ^ is inferred - - let foo = Foo { x: true }; - // ^ is inferred - - let Foo { x } = foo; - // ^ is inferred -} -``` - -Lưu ý: Khi trình biên dịch không thể suy luận các kiểu, bạn sẽ cần phải chú thích chúng một cách thủ công. Một tình huống phổ biến là khi gọi một hàm với các tham số kiểu chỉ xuất hiện ở các vị trí trả về. -```rust -module my_addrx::TypeInference{ - use std::vector; - - fun foo() { - // let v = vector::empty(); - // ^ The compiler cannot figure out the element type. - - let v = vector::empty(); - // ^~~~~ Must annotate manually. - } -} -``` - -Tuy nhiên, trình biên dịch sẽ có khả năng suy luận kiểu nếu giá trị trả về đó được sử dụng sau đó trong hàm đó. -```rust -module my_addrx::TypeInference{ - use std::vector; - - fun foo() { - let v = vector::empty(); - // ^ is inferred - vector::push_back(&mut v, 100); - } -} -```