Ruby是强类型语言。因此,它执行type conversion
而不是type casting
。现在有两种类型的转化 - implicit
和explicit
。
根据什么规则,ruby决定在哪种上下文中应用哪种转换?
答案 0 :(得分:2)
Ruby是“duck typed”,既不是强类型也不是弱类型,这意味着变量/对象的行为不一定依赖于它所属的类,而是非常“盲”并且在运行时调用方法而没有类型校验。如果它不能这样做,则会引发错误。
Ruby为Integer,String和其他一些内部类进行隐式转换。是否执行转换取决于左操作数。例如,
1 + "2"
左操作数是一个整数,因此ruby尝试进行数学运算+。但右边的操作数是一个字符串,所以ruby会尝试从字符串到整数进行转换(coersion)。 (虽然它仍然失败。要使其工作,需要重新定义方法+ for Integer或我们调用monkey patch来使用String#to_i进行显式转换)