From: me@... Date: 2020-02-18T13:39:17+00:00 Subject: [ruby-core:97189] [Ruby master Bug#14891] Pathname#join has different behaviour to File.join Issue #14891 has been updated by jnchito (Junichi Ito). zverok (Victor Shepelev) wrote in #note-7: > > I am wondering about the current behavior of Pathname#join, too. Are there any useful use cases for `Pathname.new('/a').join('/c', '/b').to_s #=> "/b"` > > I believe that `Pathname#join` acts kinda like `cd` in the shell: `cd x` is "go deeper to `x` level" while `cd /x` si "go to the root, then into `/x` folder". Thank you for your explanation. It is easy to understand the behavior if I think `Pathname.new('/a').join('/c', '/b')` means `cd /a` then `cd /c` then `cd /b`. (params can be both directories and files, though.) > I assume that those finding the behavior less logical think about paths about "just some abstract strings" and `Pathname#join` as a fancy way to write `Array#join(SYSTEM_PATH_DELIMITER)`. But `Pathname` tries to represent "filesystem path object" in a meaningful way, consistent with filesystem's intuitions. That is me who thought "`Pathname#join` as a fancy way to write `Array#join(SYSTEM_PATH_DELIMITER)`". However, Rails developers like me often see `Rails.root.join('foo/bar.jpg')` as main use case of `Pathname#join`. So I guess many of them might misunderstand it just joins two strings in a readable way. In addition, it is very confusing `File#join` has the same name and different behavior, and File and Pathname are also close idea. Many people might misunderstand they act in the same way. So probably `Pathname#join` should have been given an another good name. (`Pathname#merge` might not be a bad idea.) ---------------------------------------- Bug #14891: Pathname#join has different behaviour to File.join https://bugs.ruby-lang.org/issues/14891#change-84297 * Author: robotdana (Dana Sherson) * Status: Open * Priority: Normal * ruby -v: 2.6.0-preview2, and before * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- ~~~ ruby Pathname.new('/a').join('/b').to_s # => "/b" File.join(Pathname.new('/a'), '/b').to_s # => "/a/b" ~~~ in my case `'/b'` was in a variable and it wasn't immediately obvious why it wasn't working when I moved to use Pathname This seems to not be desired behaviour as it's different to `File.join`, and this case isn't document anywhere. Can we either change the behaviour to treat the "other" of `Pathname#+` as always relative (possibly just removing a leading slash), or add this case to the documentation? -- https://bugs.ruby-lang.org/ Unsubscribe: