تحويل Option<String> إلى Option<&str> في Rust: كيف تفعل ذلك بشكل صحيح؟
مرحباً بالجميع! لقد بدأت للتو في تعلم Rust وواجهت مشكلة في تحويل الأنواع. لدي دالة تُرجع `Option`، لكنني بحاجة لتمرير نتيجتها إلى دالة أخرى تتوقع `Option<&str>`.
إليك مثال مبسط:
```rust
fn get_name() -> Option {
Some("Alice".to_string())
}
fn print_name(name: Option<&str>) {
match name {
Some(n) => println!("Hello, {}", n),
None => println!("No name provided"),
}
}
fn main() {
let name = get_name();
// كيف يمكن تمرير name إلى print_name؟
print_name(name); // خطأ في الترجمة!
}
```
المترجم يعطي خطأ: `expected Option<&str>, found Option`. أفهم أن `String` و `&str` نوعان مختلفان، لكن كيف يمكن تحويل `Option` إلى `Option<&str>` بشكل صحيح؟
جربت فعل ذلك: `print_name(name.as_deref())`، لكنني لست متأكداً إذا كان هذا صحيحاً. أرجو شرح كيفية عمل ذلك وأي طريقة تعتبر أسلوباً معتاداً في Rust.