¿Cómo se usa Console.Readline en F #? A diferencia de Console.Writeline, no se respeta cuando lo llamo.¿Por qué Console.Readline no funciona pero Console.Readline() sí?
Respuesta
Si utiliza
let s = Console.ReadLine
sólo se está construyendo un delegado que apunta a la función ReadLine. Necesita decir
let s = Console.ReadLine()
para ejecutar realmente la función. Esto es exactamente como la sintaxis de C#, excepto que la inferencia de tipo significa que no obtienes una advertencia de compilación.
¿Qué quiere decir con "no está siendo honrado"? He aquí una pequeña aplicación de consola que acabo de escribir en VS2010b1, y funciona bien:
open System
let line = Console.ReadLine()
Console.WriteLine("You wrote {0}", line)
// Just to make it pause
let unused = Console.ReadLine()
¿Estás tratando de ejecutar el código de C# interactivo dentro de Visual Studio? Si es así, ese puede ser el problema, como explica la publicación de Brian.
Sin embargo, no he visto el mismo problema al utilizar F # Interactive desde la línea de comandos. He aquí una transcripción completa de la sesió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"
Ejecución de código de bucle de Brian de F # Interactivo no mostraron el mismo problema.
Conclusión: Parece que está roto en F # Interactive en Visual Studio, pero no cuando se ejecuta de forma interactiva desde la línea de comandos o en una aplicación de consola completa.
No lo estoy usando en modo interactivo. Solo estoy construyendo pequeñas aplicaciones de consola. –
Hmmm ... eso es extraño. ¿Esto es con la versión instalada con VS2010b1? –
Extraño. Ayer no pude hacer que funcionara, sin importar lo que intenté. Ahora no puedo hacer que falle, de nuevo sin importar lo que intento. –
No tengo una caja Beta1 a mano, pero sé que en el pasado tuvimos un error donde ReadLine() vería los comandos de fondo que se comunican entre la interfaz de usuario interactiva y el proceso en segundo plano que ejecuta su F # código. Puede ser interesante investigar qué
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
se imprime cuando lo resalta y 'Enviar a interactivo'. Creo que posiblemente verá algunas líneas inesperadas e interesantes, seguidas de líneas que escriba en la ventana.
Sí, parece que podría ser el problema: cuando intento eso en la versión beta 1, la primera línea escrita es solo "line =" –
La diferencia es que está poniendo parens vacíos al final de la llamada ReadLine y yo no fue –
- 1. Diferencia entre Console.Read() y Console.ReadLine()?
- 2. Console.ReadLine ("Texto editable de texto predeterminado en línea")
- 3. ¿Por qué $() no funciona pero funciona jQuery()?
- 4. myView.frame.origin.x = value; no funciona, pero ¿por qué?
- 5. parallel.foreach funciona, pero ¿por qué?
- 6. El carácter de incremento funciona, pero no agrega. ¿Por qué?
- 7. ¿Por qué funciona "a + + b", pero "a ++ b" no?
- 8. ¿Por qué este comando funciona con os.system() pero no subprocess.Popen()?
- 9. Ruby require 'file' no funciona, pero requiere './file'. ¿Por qué?
- 10. Esto funciona en Chrome pero no en IE, ¿por qué?
- 11. Debería ser tan obvio, pero ¿por qué no funciona?
- 12. ¿Por qué Self.navigationItem.hidesBackButton no funciona?
- 13. Python: ¿Por qué el tiempo de importación no funciona por tiempo() pero funciona para time.sleep()?
- 14. ¿Por qué no funciona UIView.exclusiveTouch?
- 15. ¿Por qué mi sitio no se carga desde una computadora, pero sí con otra?
- 16. ¿Por qué no funciona LogonUser (...) para cuentas de dominio?
- 17. ¿Por qué ImageView.setImageMatrix() no funciona?
- 18. ¿Por qué no funciona Process.WaitForInputIdle()?
- 19. ¿Por qué PadLeft no funciona?
- 20. ¿Por qué no funciona rsDebug?
- 21. Page.ClientScript.RegisterStartupScript no funciona, ¿por qué?
- 22. cell.detailTextLabel.text no funciona ... ¿por qué
- 23. ¿Por qué Integer.getInteger no funciona?
- 24. ¿Por qué no funciona pyplot.show()?
- 25. ¿Por qué Module.method_defined? (: Method) no funciona correctamente?
- 26. ¿Por qué no funciona TreeSet.contains()?
- 27. ¿Por qué no funciona ToolboxBitmapAttribute?
- 28. JFrame.setBackground() no funciona, ¿por qué?
- 29. ¿Por qué EditorBrowsable no funciona?
- 30. ¿Por qué validationEngine() no funciona?
Sí. Console.ReadLine es un valor "unit -> string". Al agregar el(), está pasando la 'unidad' que espera como argumento. – YotaXP
+1 - Este comportamiento podría hacerse más claro al requerir un espacio delante del(), al igual que cualquier otro argumento para una función. –
¡Tendría una advertencia del compilador! Cuando usas ** s **. Parece que quisiste escribir 'Console.ReadLine() |> ignore'. Yo argumentaría que es C# que no verifica si la salida de una función es capturada o ignorada. –