Khi gỡ lỗi ứng dụng F #, tôi muốn có thể gọi phương thức F # từ cửa sổ ngay lập tức VS2010 nhưng có vẻ như không hoạt động. Vấn đề dường như là các phương thức F # thực sự là các đối tượng FSharpFunc. Tôi đã thử sử dụng phương thức "Gọi" nhưng cửa sổ tương tác không nhận ra nó.Làm cách nào để gọi hàm F # từ cửa sổ ngay lập tức VS2010
Trả lời
Tích hợp F # cho Visual Studio không hỗ trợ biểu thức F # trong cửa sổ ngay lập tức (hoặc đồng hồ), do đó, tùy chọn duy nhất là viết mã C# tương ứng với biểu diễn được biên dịch mà F # sử dụng. Tôi đã thử làm điều đó và tôi đang có cùng một vấn đề như bạn mô tả - phương pháp Invoke
dường như có (trong Reflector), nhưng Visual Studio không muốn gọi nó trực tiếp. Tôi đã thử sử dụng ví dụ sau:
let foo f =
let n = f 1 2 // Breakpoint here
n + 1
Tuy nhiên, có nhiều cách khác để gọi hàm. Trong trường hợp này, mã thực tế được tạo bởi trình biên dịch F # là một cuộc gọi đến phương thức InvokeFast
. Nếu bạn gõ như sau vào cửa sổ ngay lập tức, nó hoạt động:
Microsoft.FSharp.Core.FSharpFunc<int, int>.InvokeFast<int>(f, 1, 2) |
Nó cũng xuất hiện rằng bạn có thể gọi thông thường Invoke
phương pháp sử dụng dynamic
từ C# 4.0 (chứng minh rằng phương pháp này thực sự là có!):
((dynamic)f).Invoke(1, 2)
Điều này chỉ hoạt động nếu bạn thêm tham chiếu đến Microsoft.CSharp.dll
(và sử dụng một số loại được xác định trong hội đồng ở đâu đó trong mã của bạn - ví dụ như chú thích - để nó được tải).
Ok, điều này đã làm việc! Tôi đã thử InvokeFast tĩnh nhưng tôi đã không nhận ra rằng tôi cần thiết để buộc tải Microsoft.CSharp. Sử dụng động là khá thông minh;) –
Chỉ cần làm rõ - phương pháp 'InvokeFast' sẽ hoạt động mà không có' Microsoft.CSharp.dll' (mặc dù có thể cần phải làm gì đó để cửa sổ ngay lập tức tải 'FSharp.Core.dll'). Thư viện C# chỉ cần cho 'dynamic'. –
- 1. cửa sổ ngay lập tức
- 2. gỡ lỗi đa luồng từ cửa sổ ngay lập tức
- 3. Cửa sổ 'Ngay lập tức' cho IntelliJ
- 4. Phím tắt để di chuyển từ VBA Cửa sổ ngay lập tức sang cửa sổ mã
- 5. Làm sạch cửa sổ ngay lập tức trong Visual Studio
- 6. Cửa sổ ngay lập tức ở chế độ thiết kế
- 7. Làm cách nào để dừng quá trình Python ngay lập tức khỏi cửa sổ Tkinter?
- 8. Xóa biến trong cửa sổ ngay lập tức trong C#
- 9. Làm thế nào để kích hoạt NSTimer ngay lập tức?
- 10. Không thể sử dụng WinDbg và SOS trong Visual Studio Cửa sổ ngay lập tức
- 11. Tại sao hàm operator + này được gọi ngay lập tức gọi
- 12. Sự khác biệt về hành vi cửa sổ ngay lập tức trong C# và VB.NET
- 13. Lệnh so với Cửa sổ ngay lập tức trong Visual Studio
- 14. Sự khác biệt thực tế giữa Cửa sổ Lệnh và Cửa sổ Ngay lập tức là gì?
- 15. fb.Login() cửa sổ đóng ngay lập tức và trả về 'not_authorized'
- 16. VS Cửa sổ ngay lập tức - Tên không tồn tại trong ngữ cảnh hiện tại
- 17. Visual Studio: IntelliSense ở đâu trong Cửa sổ ngay lập tức?
- 18. Chức năng gọi khi đang ở chế độ gỡ lỗi trong VC++ (Cửa sổ ngay lập tức)
- 19. Làm cách nào để làm mới cửa sổ máy tính để bàn theo chương trình (tức là F5) từ C#?
- 20. Khởi tạo con trỏ ngay lập tức sau khi gọi hàm deleteLater()
- 21. Gọi hàm javascript từ cửa sổ phương thức trong vb.net
- 22. Gọi JavaScript của cửa sổ mẹ từ cửa sổ con
- 23. Đánh giá ngay lập tức LaTeX
- 24. Ngay lập tức đóng băng AVCaptureSession
- 25. Mở tệp PDF ngay lập tức từ ứng dụng Java
- 26. fs.createWriteStream không ngay lập tức tạo tệp?
- 27. Thin :: Server # daemonize thoát ngay lập tức
- 28. "Bộ nhớ tìm kiếm" trong cửa sổ ngay lập tức của Visual Studio 2008/10 có bị hỏng không?
- 29. Nhận giá trị ngay lập tức từ UIALertView
- 30. ARC: gửi nil đến một đối tượng không gọi cho dealloc của nó ngay lập tức
Tôi đã gửi đề xuất trong MS Connect về điều này vài ngày trước: https://connect.microsoft.com/VisualStudio/feedback/details/574242/f-debugger-support –
Điều này dường như chỉ là vấn đề nếu bạn có một hàm với một đối số duy nhất. Tôi có thể gọi một hàm với nhiều đối số (curried) trực tiếp từ cửa sổ ngay lập tức với cú pháp giống như C# –