2 ms·
irb(main):001:0> a = 1 => 1 irb(main):002:0> a = '1' => "1" It doesn't seem that strong to me.
by johnfn 1y ago
irb(main):001:0> a = 1
=> 1
irb(main):002:0> a = '1'
=> "1"
It doesn't seem that strong to me.
- dgb23 1y agoIn the dynamic world being able to redefine variables is a feature not a bug (unfortunately JS has broken this), even if they are strongly typed. The point of strong typing is that the language doesn't do implicit conversions and other shenanigans.
- Spivak 1y agoWell yeah, because variables in what you consider to be a strongly typed language are allocating the storage for those variables. When you say int x you're asking the compiler to give you an int shaped box. When you say x = 1 in Ruby all you're doing is saying is that in this scope the name x now refers to the box holding a 1. You can't actually store a string in the int box, you can only say that from now on the name x refers to the string box.
- deleted 1y ago[deleted]
- 9rx 1y agoThe types are strong. The variables are weak.
- folkrav 1y agoIt would be weak if that was actually mutating the first “a”. That second declaration creates a new variable using the existing name “a”. Rust lets you do the same[1]. [1] https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html#shadowing https://doc.rust-lang.org/book/ch03-01-variables-and-mutabil...
- johnfn 1y agoRust lets you do the same because the static typing keeps you safe. In Rust, treating the second 'a' like a number would be an error. In ruby, it would crash.
- folkrav 1y agoLet’s rephrase: is naming a variable typing? As for runtime vs. compile errors - isn’t this just a trade off of interpreted languages?
- 0x457 1y agoThese are two entirely different a's you're storing reference to it in the same variable. You can do the same in rust (we agree it statically and strongly typed, right?): let a = 1; let a = '1'; Strongly typing means I can do 1 + '1' variable names and types has nothing to do with it being strongly typed.