2015-01-18 18 views
7

Câu hỏi đơn giản: Đâu là sin()? Tôi đã tìm kiếm và chỉ tìm thấy trong tài liệu Rust có các đặc điểm như std::num::Float rằng yêu cầu tội lỗi, nhưng không triển khai.Chức năng sin ở đâu?

Trả lời

11

Đặc điểm Float đã bị xóa và phương pháp hiện đang triển khai cố định trên các loại. Điều đó có nghĩa là một chút ít gõ để truy cập các chức năng toán học:

fn main() { 
    let val: f32 = 3.14159; 
    println!("{}", val.sin()); 
} 

Tuy nhiên, đó là mơ hồ nếu 3.14159.sin() đề cập đến một số 32 hoặc 64-bit, vì vậy bạn cần phải xác định nó một cách rõ ràng. Ở trên, tôi đặt kiểu của biến, nhưng bạn cũng có thể sử dụng một loại hậu tố:

fn main() { 
    println!("{}", 3.14159f64.sin()); 
} 

Bạn cũng có thể sử dụng unambigous cú pháp chức năng cuộc gọi:

fn main() { 
    println!("{}", f32::sin(3.14159)); 
} 
+0

Thật thú vị (và một chút bối rối khi tới từ nền C++/java) mà bạn không sử dụng/nhập "math" nhưng "Float". – Kapichu

+1

Không hoạt động. Trong ví dụ đầu tiên, tôi nhận được 'error: type _ không thực hiện bất kỳ phương thức nào trong phạm vi có tên sin', trong ví dụ thứ hai, tôi nhận được' error: tên chưa được giải quyết Float :: sin'. $ rustc --version output 'rustc 0.13.0-night (96a3c7c6a 2014-12-23 22:21:10 +0000)' – Kapichu

+1

Bạn sẽ muốn nâng cấp lên phiên bản mới nhất của Rust. Để chuẩn bị cho bản phát hành 1.0, có rất nhiều công việc đang diễn ra! Trong trường hợp đặc biệt này, các dấu phẩy điểm động hiện mặc định là kiểu 'f64' ([RFC có liên quan] (https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback. md)). Nếu bạn muốn làm cho nó hoạt động, mà không cần nâng cấp, hãy thử '3.14f64.sin()'. – Shepmaster

1

Float là Đặc điểm, bao gồm triển khai, nhập mã này để áp dụng cho f32 hoặc f64.

use std::num::Float; 

fn main() { 
    println!("{}", 1.0f64.sin()); 
} 
Các vấn đề liên quan