[#97086] [Ruby master Bug#16612] Enumerator::ArithmeticSequence#last with float range produces incorrect value — muraken@...
Issue #16612 has been updated by mrkn (Kenta Murata).
4 messages
2020/02/07
[#97095] [PATCH] Modify shebang of libexec/y2racc and libexec/racc2y. — Wang Mingyu <wangmy@...>
change /usr/local/bin/ruby to /usr/bin/env ruby.
3 messages
2020/02/08
[#97307] [Ruby master Feature#16663] Add block or filtered forms of Kernel#caller to allow early bail-out — headius@...
Issue #16663 has been reported by headius (Charles Nutter).
29 messages
2020/02/28
[ruby-core:97189] [Ruby master Bug#14891] Pathname#join has different behaviour to File.join
From:
me@...
Date:
2020-02-18 13:39:17 UTC
List:
ruby-core #97189
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: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>