Есть ли конкретная причина, по которой некоторые бинарные операторы в F #, такие как (+), (>), (<), принимают только параметры, которые должны быть одного типа? - PullRequest
3 голосов
/ 11 июля 2019

Такие языки, как C#, позволяют нам писать код, как показано ниже:

// C#
Console.WriteLine($"{3 > 2.3}"); // compare an int with a double

Но F# не позволяет нам это делать.Например,

// F#
printfn "%A" (3 > 4)            // fine
printfn "%A" (3.0 > 4.0)        // fine
printfn "%A" (3 > 4.0)          // wrong 

Есть ли конкретная причина, по которой некоторые бинарные операторы в F#, такие как (+), (>), (<) принимают только параметры, которые должны быть одного типа?

1 Ответ

8 голосов
/ 11 июля 2019

F # не выполняет неявное преобразование типов. Неявные преобразования могут создавать проблемы, и это одна из причин, по которой многие люди испытывают смешанные эмоции относительно JavaScript. Например, пожалуйста, наслаждайтесь этим классическим стихотворением javascript. Неявное преобразование имеет фундаментальное значение для того, что делает возможным это стихотворение.

> Array(16).join('wat' - 1) + ' Batman'
'NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN Batman'

Что такое 3> «4», а как насчет «4»> 3? У вас могут быть ответы на эти вопросы, которые имеют смысл для вас, однако есть много правильных способов интерпретировать, каким должно быть неявное преобразование. Неоднозначность здесь может быть менее очевидной с 3> 4.0, однако, если у вас есть философия вождения явного преобразования, лучше применять ее повсеместно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...