# File.join : can't convert Fixnum into String?

**URL:** <https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862>\
**Category:** Ruby\
**Created:** [August 8, 2006, 12:26pm UTC](https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862 "2006-08-08T12:26:23Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [August 8, 2006, 12:26pm UTC](https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862/1 "2006-08-08T12:26:23Z")

</div>

Where’s the Fixnum?

class X \< Array  
def to\_s  
join(’.’)  
end  
def inspect ; to\_s ; end  
end  
x=X.new  
x \<\< 1  
x \<\< 2  
x \<\< 3  
x #=\> 1.2.3  
x.class #=\> X  
File.join( x, ‘index.rb’ )

TypeError: can’t convert Fixnum into String  
from (irb):19:in `join’  
from (irb):19  
from :0

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [August 8, 2006, 12:41pm UTC](https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862/2 "2006-08-08T12:41:25Z")

</div>

On 08/08/06, Trans [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> x \<\< 2

Works for me

irb(main):001:0\> class X \< Array  
irb(main):002:1\> def to\_s  
irb(main):003:2\> join(‘.’)  
irb(main):004:2\> end  
irb(main):005:1\> def inspect ; to\_s ; end  
irb(main):006:1\> end  
=\> nil  
irb(main):007:0\> x=X.new  
=\>  
irb(main):008:0\> x \<\< 1  
=\> 1  
irb(main):009:0\> x \<\< 2  
=\> 1.2  
irb(main):010:0\> x \<\< 3  
=\> 1.2.3  
irb(main):011:0\> x.class  
=\> X  
irb(main):012:0\> File.join(x,‘index.rb’)  
=\> “1/2/3/index.rb”

I’m running 1.8.2 on Windows 2000.

Farrel

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [August 8, 2006, 12:41pm UTC](https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862/3 "2006-08-08T12:41:25Z")

</div>

On 8/8/06, Trans [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> x \<\< 2

File.join doesn’t use Array#to\_s. See:

irb(main):001:0\> File.join %w(a b), “c”  
=\> “a/b/c”  
irb(main):002:0\> File.join [“a”, “b”]  
=\> “a/b”  
irb(main):003:0\>  
irb(main):004:0\> File.join [1, 2]  
TypeError: can’t convert Fixnum into String  
from (irb):4:in `join’  
from (irb):4  
from :0  
irb(main):005:0\>

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [August 8, 2006, 1:08pm UTC](https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862/4 "2006-08-08T13:08:28Z")

</div>

On 8/8/06, Simen E. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> On 8/8/06, Trans [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > Where’s the Fixnum?  
> > File.join doesn’t use Array#to\_s. See:

Seems like

1. File.join is recursive on arrays. i.e. your example is [almost]  
equivalent to  
File.join([1,2,3], ‘index.rb’) and that is equivalent to  
File.join(File.join(1,2,3), ‘index.rb’)

2. File.join doesn’t do any type conversions. I.e. it won’t call your  
to\_s.

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [August 8, 2006, 3:02pm UTC](https://www.ruby-forum.com/t/file-join-cant-convert-fixnum-into-string/101862/5 "2006-08-08T15:02:46Z")

</div>

Jan S. wrote:

> 1. File.join doesn’t do any type conversions. I.e. it won’t call your to\_s.  
> It does type conversion, which is why it says it can’t convert Fixnum  
> to String. But you are right that it does not call #to\_s, rather it  
> calls #to\_str. But it doesn’t call to\_str for an Array, as you point  
> out. Seem kind of anti-duck. But anyhow guess I’ll have to delegate  
> instead of subclass.

Thanks,  
T.
