Nói chung, tôi khuyên bạn nên sử dụng các trích dẫn đã nhập bất cứ khi nào bạn có thể. Như thường lệ, các loại sẽ cho phép bạn thực thi tĩnh một số điều kiện chính xác có thể gây ra lỗi trong thời gian chạy. Xem xét:
let one = <@@ "one" @@>
// exception at runtime
let two = <@@ 1 + %%one @@>
như trái ngược với
let one = <@ "one" @>
// compile time error: the type 'string' does not match the type 'int'
let two = <@ 1 + %one @>
Bên cạnh đó, đôi khi trích dẫn untyped cần chú thích loại bổ sung trong trường hợp trích dẫn gõ không:
// ok
let l = <@ [1] @>
let l2 = <@ List.map id %l @>
// fails at runtime (obj list assumed instead of int list)
let l = <@@ [1] @@>
let l2 = <@@ List.map id %%l @@>
// ok
let l = <@@ [1] @@>
let l2 = <@@ List.map (id:int->int) %%l @@>
Tuy nhiên, nếu bạn xây dựng một cái gì đó cực kỳ chung chung ra khỏi danh ngôn, nó có thể không được sử dụng trích dẫn gõ (ví dụ, vì các loại không được biết đến tĩnh). Trong ý nghĩa đó, các trích dẫn không được giải thích cho bạn linh hoạt hơn. Cũng cần lưu ý rằng nó rất dễ chuyển đổi giữa các trích dẫn đã nhập và không được nhập khi cần thiết (upcast một số Expr<_>
đến Expr
để chuyển từ gõ thành không được gõ, sử dụng Expr.Cast
để đi theo cách khác).