Làm thế nào để bạn sử dụng Console.Readline trong F #? Không giống như Console.Writeline, nó không được vinh danh khi tôi gọi nó.Tại sao Console.Readline không hoạt động nhưng Console.Readline() thực hiện?
Trả lời
Nếu bạn sử dụng
let s = Console.ReadLine
bạn chỉ việc xây dựng một đại biểu trỏ đến hàm ReadLine. Bạn cần phải nói
let s = Console.ReadLine()
để thực sự thực thi chức năng. Điều này giống như cú pháp C#, ngoại trừ kiểu suy luận có nghĩa là bạn không nhận được cảnh báo trình biên dịch.
Ý của bạn là gì bởi "nó không được vinh danh"? Dưới đây là một ứng dụng giao diện điều khiển nhỏ Tôi vừa viết bằng VS2010b1, và nó hoạt động tốt:
open System
let line = Console.ReadLine()
Console.WriteLine("You wrote {0}", line)
// Just to make it pause
let unused = Console.ReadLine()
Bạn đang cố gắng để chạy mã từ F # Interactive trong Visual Studio? Nếu vậy, đó có thể là vấn đề, như bài viết của Brian giải thích.
Tuy nhiên, tôi chưa thấy cùng vấn đề khi sử dụng F # Interactive từ dòng lệnh. Dưới đây là bảng điểm hoàn chỉnh của phiên:
Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved
F# Version 1.9.6.16, compiling for .NET Framework Version v4.0.20506
Please send bug reports to [email protected]
For help type #help;;
> open System;;
> let line = Console.ReadLine();;
Hello world
val line : string = "Hello world"
Chạy mã lặp của Brian từ F # Interactive không hiển thị cùng một vấn đề.
Dòng dưới cùng: Dường như điều này bị hỏng trong F # Interactive trong Visual Studio, nhưng không phải khi chạy tương tác từ dòng lệnh hoặc trong ứng dụng giao diện điều khiển đầy đủ.
Tôi không sử dụng nó ở chế độ tương tác. Tôi chỉ đang xây dựng các ứng dụng giao diện điều khiển nhỏ. –
Hmmm ... thật kỳ quặc. Đây có phải là phiên bản được cài đặt với VS2010b1 không? –
Lạ. Hôm qua tôi không thể làm cho nó hoạt động bất kể tôi đã thử làm gì. Bây giờ tôi không thể làm cho nó thất bại, một lần nữa không có vấn đề gì tôi cố gắng. –
Tôi không có hộp Beta1 tiện dụng, nhưng tôi biết rằng trước đây chúng tôi đã có lỗi trong đó ReadLine() sẽ thấy các lệnh nền giao tiếp giữa giao diện người dùng tương tác và quá trình nền chạy F # của bạn mã. Có thể điều tra thú vị những gì
let Foo max =
let rec Loop i =
if i < max then
let line = System.Console.ReadLine()
printfn "line = %s" line
Loop (i+1)
Loop 1
Foo 12
in khi bạn tô sáng nó và 'Gửi tới tương tác'. Tôi nghĩ có thể bạn sẽ thấy một vài dòng thú vị không mong đợi, tiếp theo là các dòng bạn nhập vào cửa sổ.
Yup, có vẻ như nó có thể là vấn đề: khi tôi thử điều đó trong bản beta 1, dòng đầu tiên được viết ra chỉ là "line =" –
Sự khác biệt là bạn đang đặt khoảng trống trống vào cuối cuộc gọi ReadLine và tôi không phải vậy. –
- 1. Console.ReadLine bị bỏ qua
- 2. Ruby yêu cầu 'tệp' không hoạt động nhưng yêu cầu './file' thực hiện. Tại sao?
- 3. php - date_default_timezone_set không hoạt động nhưng ini_set 'date.timezone' thực hiện. Tại sao?
- 4. parallel.foreach hoạt động, nhưng tại sao?
- 5. Tại sao __unicode__ không hoạt động nhưng __str__ làm gì?
- 6. Tại sao việc thực hiện offsetof() này hoạt động?
- 7. Console.ReadLine ("Văn bản có thể chỉnh sửa văn bản mặc định trên dòng")
- 8. Tại sao LogonUser (...) không hoạt động cho tài khoản miền?
- 9. Tại sao mã này không hoạt động trên ruby 1.9 nhưng hoạt động trên ruby 1.8?
- 10. Modulo (%) hoạt động với kiểu dữ liệu thập phân nhưng không hoạt động với float hoặc thực. TẠI SAO?
- 11. Làm cách nào để hủy bỏ một luồng khác trong .NET, khi chuỗi đã nói đang chạy Console.ReadLine?
- 12. Page.ClientScript.RegisterStartupScript không hoạt động - tại sao?
- 13. Hibernate; HQL; tại sao truy vấn xóa không hoạt động, nhưng chọn không?
- 14. Tại sao ListView.ScrollIntoView không hoạt động?
- 15. Tại sao Array.push.apply không hoạt động?
- 16. Tại sao validationEngine() không hoạt động?
- 17. Tại sao pyplot.show() không hoạt động?
- 18. Tại sao TextRenderer.MeasureText không hoạt động đúng?
- 19. Tại sao ImageView.setImageMatrix() không hoạt động?
- 20. Tại sao TypeConverter này không hoạt động?
- 21. Tại sao rsDebug không hoạt động?
- 22. cell.detailTextLabel.text không hoạt động ... tại sao
- 23. Tại sao Catransition này không hoạt động?
- 24. Tại sao unbind này không hoạt động?
- 25. Tại sao DataColumn.Caption không hoạt động?
- 26. Tại sao RewriteRule này không hoạt động?
- 27. Tại sao cắt không hoạt động?
- 28. Tại sao gdb đúc không hoạt động?
- 29. lý do tại sao() không hoạt động?
- 30. Tại sao `{} .toString.apply (array)` không hoạt động?
Yup. Console.ReadLine là một giá trị "đơn vị -> chuỗi". Bằng cách thêm dấu(), bạn đang truyền vào 'đơn vị' mà nó đang chờ đợi như một đối số. – YotaXP
+1 - Hành vi này có thể được làm rõ hơn bằng cách yêu cầu một dấu cách phía trước(), giống như bất kỳ đối số nào khác cho hàm. –
Bạn sẽ nhận được cảnh báo trình biên dịch! Khi bạn sử dụng ** s **. Có vẻ như bạn muốn viết 'Console.ReadLine() |> ignore'. Tôi cho rằng đó là C# không kiểm tra xem đầu ra của một hàm có bị bắt hoặc bỏ qua hay không. –