[#389739] Ruby Challenge — teresa nuagen <unguyen90@...>

Here is a ruby challenge for all you computer science lovers out there,

22 messages 2011/11/05
[#389769] Re: Ruby Challenge — "Jonan S." <jonanscheffler@...> 2011/11/05

Totally unrelated to any husker computer science programs right? Like

[#389905] Re: Ruby Challenge — Stephen Ramsay <sramsay.unl@...> 2011/11/09

Jonan S. wrote in post #1030330:

[#389907] Re: Ruby Challenge — aseret nuagen <unguyen90@...> 2011/11/09

> You mean like the professor for the course? Because that would be me .

[#389915] Re: Ruby Challenge — Robert Klemme <shortcutter@...> 2011/11/09

On Wed, Nov 9, 2011 at 4:52 AM, aseret nuagen <unguyen90@aim.com> wrote:

[#389792] Tricky DSL, how to do it? — Intransition <transfire@...>

I'd want to write a DSL such that a surface method_missing catches

18 messages 2011/11/06

[#389858] Compiling Ruby Inline C code - resolving errors — Martin Hansen <mail@...>

I am trying to get this Ruby inline C code http://pastie.org/2825882 to

12 messages 2011/11/08

[#389928] Forming a Ruby meetup group... — "Darryl L. Pierce" <mcpierce@...>

Where I work we have a local Ruby group that used to meet up, until the

12 messages 2011/11/09

[#389950] The faster way to read files — "Noé Alejandro" <casanejo@...>

Does anybody know which is the fastest way to read a file? Lets say

18 messages 2011/11/09

[#390064] referring to version numbers in a gem — Chad Perrin <code@...>

How do I specify and access a gem's version number within the code of the

28 messages 2011/11/11

[#390238] RVM problem, plz help — Misha Ognev <b1368810@...>

Hi, I have this problem:

15 messages 2011/11/16

[#390308] any command line tools for querying yaml files — Rahul Kumar <sentinel1879@...>

(Sorry, this is not exactly a ruby question).

11 messages 2011/11/18

[#390338] Newbie - cmd question — Otto Dydakt <ottodydakt@...>

I've literally JUST downloaded ruby from rubyinstaller.org.

21 messages 2011/11/19
[#390342] Re: Newbie - cmd question — Otto Dydakt <ottodydakt@...> 2011/11/19

OK thank you, I uninstalled & reinstalled, checking the three boxes at

[#390343] Re: Newbie - cmd question — "Ian M. Asaff" <ian.asaff@...> 2011/11/19

did you type "irb" first to bring up the ruby command prompt?

[#391154] Re: Newbie - cmd question — "Hussain A." <hahmad@...> 2011/12/12

Hi all,

[#391165] Re: Newbie - cmd question — Luis Lavena <luislavena@...> 2011/12/12

Hussain A. wrote in post #1036281:

[#390374] Principle of Best Principles — Intransition <transfire@...>

I seem to run into a couple of design issue a lot and I never know what is

16 messages 2011/11/20

[#390396] how to call Function argument into another ruby script. — hari mahesh <harismahesh@...>

Consider I have a ruby file called library.rb.

10 messages 2011/11/21

[#390496] How to make 1.9.2 my default version using RVM — Fily Salas <fs_tigre@...>

Hi,

25 messages 2011/11/24

[#390535] Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...>

Well, first of all, I'm new to Ruby, and to this forum. So, hello. :)

39 messages 2011/11/25
[#390580] Re: Is high-speed sorting impossible with Ruby? — Joao Pedrosa <joaopedrosa@...> 2011/11/27

Hi,

[#390593] Re: Is high-speed sorting impossible with Ruby? — "Gaurav C." <chande.gaurav@...> 2011/11/27

Joao Pedrosa wrote in post #1033884:

[#390600] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

A big gain can be had by disabling the garbage collector. Here is my best

[#390601] Re: Is high-speed sorting impossible with Ruby? — Douglas Seifert <doug@...> 2011/11/27

I've thrown various solutions up on github here:

[#390650] Loading a faulty ruby file - forcing this — Marc Heiler <shevegen@...>

Hi.

10 messages 2011/11/29

[#390689] Stupid question — James Gallagher <lollyproductions@...>

Hi everyone.

22 messages 2011/11/30

Re: errors with respond_to? and inject

From: Sam Duncan <sduncan@...>
Date: 2011-11-30 20:47:20 UTC
List: ruby-talk #390714
On 01/12/11 09:03, S辿bastien M. wrote:
> Hello,
>
> This is my first post, and i hope i use the correct topic.
> There are two errors i do not understand in the code below
>
> I've commented out the line that don't work, and the line directly below
> works just fine
> Finally i put the errors when using the problematic lines
>
> I do not see any errors in the commented line, if someone do i'll be
> happy to understand what is wrong
>
> thx in advance
>
> Here is the code
> ----------------------------------------------------------------
> class Item
>    attr_reader :name, :price
>
>    def initialize name, price
>      @name, @price = name, price
>    end
>
>    def + item
> #    price + item.price if item.respond_to? price #### 1
>      price + item.price if item.is_a? Item
>    end
> end
>
> class Items
>    def initialize
>      @items = []
>    end
>
>    def<<  item
>      @items<<  item if item.is_a? Item
>    end
>
>    def price
>      @items.collect { |i| i.price }.inject(:+)
> #    @items.inject(:+) #### 2
>    end
> end
>
> i = Items.new
>
> i<<  Item.new('a', 1)
> i<<  Item.new('b', 2)
> i<<  Item.new('c', 3)
>
> puts i.price
> --------------------------------------------------------------
> The errors
> --------------------------------------------------------------
> ##### 1
> ./test2.rb:11:in `respond_to?': 1 is not a symbol (TypeError)
> ##### 2
> ./test2.rb:25:in `+': Item can't be coerced into Fixnum (TypeError)
>
The first error is pretty straight forward to sort out. The #respond_to? 
method is expecting a symbol, so changing 'price' to ':price' fixes 
that. The other error is due (I believe) to the fact that the inject 
ends up trying to use Numeric#+ instead of your Item#+ method when the 
object on the left of the operator is a number. To fix this you can 
define Item#coerce.

This is likely not the best way to do it, but it appears to work;

class Item
   attr_reader :name, :price

   def initialize name, price
     @name, @price = name, price
   end

   def coerce arg
     if arg.is_a? Numeric
       [arg, price]
     end
   end

   def + item
     price + item.price if item.respond_to? :price
   end
end

class Items
   def initialize
     @items = []
   end

   def << item
     @items << item if item.is_a? Item
   end

   def price
     @items.inject(:+)
   end
end

i = Items.new

i << Item.new('a', 1)
i << Item.new('b', 2)
i << Item.new('c', 3)

puts i.price


Hope that helps
Sam

In This Thread