Monkey accepts float passed into int w/o a cast

Monkey Forums/Monkey Programming/Monkey accepts float passed into int w/o a cast

Waldo Reed(Posted 2012) [#1]
Output...
The result is 3
The result is 2.3

I understand why the Add:Int function is called for the first line of output; an overloaded function with a default argument is used when no matching overloaded function is found. Just wondering if a float should be passed into int type argument w/out a cast.

Strict

Global dec_glob:Float = 0.8

Function Add:Int(valOne:Int, valTwo:Int=2)
    Return valOne + valTwo
End

Function Add:Float(valOne:Float, valTwo:Float)
    Return valOne + valTwo
End

Function Main:Int()
    local decimal:Float = 1.5
    local statement:String = "The result is "
    Print(statement+Add(decimal))
    Print(statement+Add(decimal, dec_glob))
    Return 0
End



therevills(Posted 2012) [#2]
My guess is that Monkey is autoboxing the float to an int.


muddy_shoes(Posted 2012) [#3]
They're primitives so it's just a direct cast in languages where it makes a difference.

The "should" of it is not possible to answer, but it's been around for a while so is presumably intended Monkey behaviour. Most languages would give you a warning about loss of precision where an implicit float->int cast is occurring. Monkey doesn't do warnings.


MikeHart(Posted 2012) [#4]
I am glad that Monkey does it that way and hope it won't be changed.


Gerry Quinn(Posted 2012) [#5]
I think the compiler lets some stuff through that it shouldn't. It's rarely a problem, but it means that sometimes when a bug bites it's not where you expect.

However, in the case above, I think Monkey is working as intended.