2012-04-02 39 views
7

Tôi có một phương pháp trong đó kêu gọi một phương thức trên một số nguyên:Có thể có một cuộc gọi phương thức động cho các giá trị tham số mặc định trong Ruby không?

def print_time(time = 2.days.from_now) 
    puts time 
end 

tôi đã cố gắng trong giao diện điều khiển có vẻ như để làm việc, nhưng là mã này an toàn không? Ý tôi là bằng ví dụ:

  • tôi chạy máy chủ của tôi với bộ nhớ đệm Cache kích hoạt
  • tôi gọi là phương pháp mà in 2 ngày sau
  • 1 giờ sau đó giá trị in sẽ được thực sự 1 giờ + 2 ngày sau ?

Giá trị (2.days.from_now) không được đánh giá chỉ một lần khi phương pháp được xác định?

Cảm ơn bạn đã giúp tôi làm rõ! :)

Trả lời

2

Câu hỏi của bạn không rõ ràng.

Bạn có lo lắng về việc lưu vào bộ nhớ đệm không? Rõ ràng một cái gì đó được đánh giá và sau đó lưu trữ (ví dụ, với bộ nhớ đệm hành động hoặc bộ nhớ đệm trang) sẽ không được đánh giá một lần nữa cho đến khi bộ nhớ cache đã được xóa.

Hoặc bạn có lo lắng về giá trị đối số mặc định được lưu vào bộ nhớ cache khi bạn xác định phương thức và tất cả các cuộc gọi tiếp theo có thể có cùng giá trị như mặc định không? Trong trường hợp này, kiểm tra giao diện điều khiển của bạn là hợp lệ và @ Linux_iOS.rb.cpp.c.lisp.n (longest.name.evar) là chính xác - Ruby đánh giá biểu thức đó mỗi lần.

Hết sức tò mò, điều gì khiến bạn nghi ngờ thử nghiệm của riêng mình trong bảng điều khiển?

+0

Xin lỗi về tên ... Tôi sẽ thay đổi tên, nhưng điều đó sẽ phá vỡ một vài liên kết. – Linuxios

14

Ruby đánh giá biểu thức mỗi khi bạn gọi phương thức. Vì vậy, nếu bạn xác định nó vào thứ ba, và gọi nó vào thứ năm, kết quả sẽ là đúng.

Các vấn đề liên quan