Существует еще одно тонкое отличие:
File.join('foo','bar')
#=> "foo/bar"
['foo','bar'].join('/')
#=> "foo/bar"
Но если вы передадите аргумент, уже заканчивающийся /
(что довольно часто при работе с путями), у вас не будет двух косых чертв результате:
File.join('foo/','bar')
#=> "foo/bar"
['foo/','bar'].join('/')
#=> "foo//bar"