Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Ruby is a dynamic language, `version_string` can be anything. The author uses `to_s` to coerce it into a string. There are problems with that: if I pass in an array it'll coerce into `"[1,2,3]".split(".").map(&:to_i)`, which makes no sense.


One could do a conversion e. g.

    if x.is_a? Array
      x = x.first
Or something like that. Could be one line too:

    x = x.first if x.is_a? Array


Most times it's better to just accept the dynamic nature of the language rather than do this kind of runtime type checking. You'd have to do this `.is_a?` dance for every type to have it be reliable.

Even if you implement an "interface" (duck typing) with `respond_to?(:to_app_version)` you still can't be sure that the return type of this `:to_app_version` is actually a string you can call `split()` on.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: