[#377882] remove array bracket — Kamarulnizam Rahim <niezam54@...>

Hi when i run my script, the output is as followed:

18 messages 2011/02/02

[#378046] Setter method for Hash value — Rolf Pedersen <rolfhsp@...>

Hi

20 messages 2011/02/03
[#378052] Re: Setter method for Hash value — Brian Candler <b.candler@...> 2011/02/03

Rolf Pedersen wrote in post #979431:

[#378056] Re: Setter method for Hash value — Rolf Pedersen <rolfhsp@...> 2011/02/03

Hi Brian (and others who have contributed with suggestions along the same

[#378144] C extension: How to check if a VALUE is still alive (not being GC'ed)? — Iñaki Baz Castillo <ibc@...>

Hi, I'm coding an async DNS resolver for EventMachine based on udns (a

13 messages 2011/02/05
[#378171] Re: C extension: How to check if a VALUE is still alive (not being GC'ed)? — Tony Arcieri <tony.arcieri@...> 2011/02/06

On Sat, Feb 5, 2011 at 4:02 PM, I=F1aki Baz Castillo <ibc@aliax.net> wrote:

[#378179] Re: C extension: How to check if a VALUE is still alive (not being GC'ed)? — Iñaki Baz Castillo <ibc@...> 2011/02/06

2011/2/6 Tony Arcieri <tony.arcieri@medioh.com>:

[#378199] Choosing an office suite — Hilary Bailey <my77elephants@...>

I am trying to decide which office suite to choose from. The only

30 messages 2011/02/07
[#378229] Re: Choosing an office suite — Phillip Gawlowski <cmdjackryan@...> 2011/02/07

On Mon, Feb 7, 2011 at 11:15 AM, Hilary Bailey <my77elephants@gmail.com> wrote:

[#378202] making hash key from arrays — Arihan Sinha <arihan_sinha@...>

Hi All,

11 messages 2011/02/07

[#378254] "permission denied" happening too often — Peter Bailey <pbailey@...>

Hello,

15 messages 2011/02/08
[#378256] Re: "permission denied" happening too often — Anurag Priyam <anurag08priyam@...> 2011/02/08

> I've got Ruby scripts that have been working fine for years now. But,

[#378257] Re: "permission denied" happening too often — Markus Schirp <mbj@...> 2011/02/08

You can also try to strace your script. In the logs you'll find the system

[#378259] Re: "permission denied" happening too often — Peter Bailey <pbailey@...> 2011/02/08

Markus Schirp wrote in post #980289:

[#378307] undefined class/module YAML::PrivateType - Error — "Priya D." <dharsininitt@...>

Hi,

11 messages 2011/02/09

[#378341] System calls with ` in parameters — "Gerad S." <geradstemke@...>

Hi All,

12 messages 2011/02/09

[#378618] Defining class methods — Tony Arcieri <tony.arcieri@...>

It seems there are 3 ways of defining class methods (at least in common

12 messages 2011/02/16

[#378685] LiveAST: a pure Ruby 1.9.2 library obtaining live abstract syntax trees — "James M. Lawrence" <quixoticsycophant@...>

= LiveAST

13 messages 2011/02/18

[#378753] posix_mq : Problem installing on HPUX — Tadeusz Bochan <tad.bochan@...>

Hello,

13 messages 2011/02/20

[#378890] a, b = Array.new(2).map!{|x| data.dup} — Stefan Salewski <mail@...>

I think I can replace this code

19 messages 2011/02/23
[#378892] Re: a, b = Array.new(2).map!{|x| data.dup} — niklas | brueckenschlaeger <niklas@...> 2011/02/23

Are you sure you can't rework your code to *not* copy data 5x? I assume

[#378899] Re: a, b = Array.new(2).map!{|x| data.dup} — Stefan Salewski <mail@...> 2011/02/23

On Thu, 2011-02-24 at 07:00 +0900, niklas | brueckenschlaeger wrote:

[#378941] Automatic question generator libs in Ruby Language — Sniper Abandon <sathish.salem.1984@...>

is there any Automatic question generator libraries in Ruby Language ?

20 messages 2011/02/24
[#379058] Re: Automatic question generator libs in Ruby Language — Sniper Abandon <sathish.salem.1984@...> 2011/02/27

suppose if i have a paragraph (arround 250 words)

[#379172] Re: Automatic question generator libs in Ruby Language — Shadowfirebird <shadowfirebird@...> 2011/03/01

> i want to get all the possible question from that paragraph

[#379174] Re: Automatic question generator libs in Ruby Language — Peter Zotov <whitequark@...> 2011/03/01

On Tue, 1 Mar 2011 19:31:36 +0900, Shadowfirebird wrote:

[#379175] Re: Automatic question generator libs in Ruby Language — Adam Prescott <mentionuse@...> 2011/03/01

On Tue, Mar 1, 2011 at 10:55 AM, Peter Zotov <whitequark@whitequark.org>wrote:

[#379177] Re: Automatic question generator libs in Ruby Language — Peter Zotov <whitequark@...> 2011/03/01

On Tue, 1 Mar 2011 20:02:13 +0900, Adam Prescott wrote:

[#379179] Re: Automatic question generator libs in Ruby Language — Adam Prescott <mentionuse@...> 2011/03/01

On Tue, Mar 1, 2011 at 12:28 PM, Peter Zotov <whitequark@whitequark.org>wrote:

[#378949] why is $1 in a grep() equal to nil? — 7stud -- <bbxx789_05ss@...>

class DataSource

16 messages 2011/02/24
[#378953] Re: why is $1 in a grep() equal to nil? — Eric Christopherson <echristopherson@...> 2011/02/25

On Thu, Feb 24, 2011 at 2:59 PM, 7stud -- <bbxx789_05ss@yahoo.com> wrote:

[#378958] parsing rule for this code? — 7stud -- <bbxx789_05ss@...>

1)

11 messages 2011/02/25

[#379000] Symbol#to_proc helping out with #select to beat Scala-s solution — Jarmo Pertman <jarmo.p@...>

Hey!

9 messages 2011/02/25

[#379074] finding a tag in a binary file — rob stanton <tnotnats@...>

I have a binary file in which I'd like to find multiple strings of 10

12 messages 2011/02/27

Re: Setter method for Hash value

From: Rolf Pedersen <rolfhsp@...>
Date: 2011-02-04 13:32:53 UTC
List: ruby-talk #378094
Hei Brian

Thanks for the answer.
I do have a solution now which works for c.props[:key] and c.props[:key] =
"value", but that solves just part of my problem.
I realize that I need to elaborate on the "requirements" a bit further.

MyClass should have a "virtual hash property", props.
I want to interact with props, like it was a regular hash, but under the
hood, it should perform calls towards the external library.

SomeClass (renamed to DataClass in code below) just represents a sample
external library with some functions getting or setting some internal data:
 * get_props()        # Gets all the properties, data format is not
important, could be a comma separated list. The receiver should handle the
conversion to Hash.
 * get_prop(key)    # Gets one value for a given key
 * set_props(data) # Set all the properties. Again, data format is not
important.
 * set_prop(key, value)  # Set one particular property.

With MyClass I should be able to to the following:
c = MyClass.new
(1)
c.props  # under the hood, this will call SomeClass::get_props() and convert
the response to a hash
=> {:a=>1, :b=>2, :c=>3}
(2)
c.props[:a]     # This should make a call to SomeClass::get_prop("a")
=> 1
(3)
c.props={:a=>"a", :b=>"b", :c=>"c"}   # This should make a call to e.g.
SomeClass::set_props("a", "a", "b", "b", "c", "c")
=> {:a=>"a", :b=>"b", :c=>"c"}
(4)
c.props[:d] = "d"  # This should make a call to SomeClass::set_prop("d")
=> "d"
(5)
c.props      # Again, make a vall to SomeClass::get_props(), to check that
new data is stored.
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}


Now, following your first suggestion, Brian, I came up with the following
code, where I use a DataClass which represents the external interface, and
which happens to operate on Hash data, to make it simple:

      class DataClass
        @@data = {:a=>1, :b=>2, :c=>3}
        def self.get_props()
          @@data
        end
        def self.get_prop(key)
          @@data[key]
        end
        def self.set_props(data)
          @@data = data
        end
        def self.set_prop(key, value)
          @@data[key] = value
        end
      end

      class PropsClass
        def [](key)
          DataClass::get_prop(key)
        end
        def []=(key, value)
          DataClass::set_prop(key, value)
        end
      end

      class MyClass
        def initialize
          @props = PropsClass.new
        end
        def props
          @props
        end
      end


Now this works for (2) and (4), but not for (1) and (3).
(1) just returns
      #<PropsClass:0x1418748>
and (3) returns
      test_props.rb:35:in `<main>': undefined method `props=' for
#<MyClass:0x14202d8 @props=#<PropsClass:0x14202c0>> (NoMethodError)

The reason is obvious. I haven't even found a way to call get_props and
set_props.
Clearly, something is missing.
I don't have a method that redefines = in the PropsClass. (This method
cannot be redefined, right?).
And according to my requirements, c.props should not return the PropsClass
instance, but rather call and return a value from a PropsClass function,
which I assume is not possible to do either.
So, I don't understand how (if possible) to go about achieving what I
want.... Maybe this is a dead end?
:o(

About your other suggestion, delegates, I have to study this a bit more. I'm
still a low-level Ruby programmer :o)

Best regards,
Rolf


On Fri, Feb 4, 2011 at 9:56 AM, Brian Candler <b.candler@pobox.com> wrote:

> Rolf Pedersen wrote in post #979464:
> > Hi Brian (and others who have contributed with suggestions along the
> > same
> > line)
> >
> > It's not the class MyClass that I'd like to behave like a Hash.
> > I'm trying to make getter and setter methods for a virtual hash property
> > called props.
>
> Then the 'props' object which you return needs methods [] and []=
> defined, which do whatever you want them to do.
>
> I see you are using these methods on the class itself (not instances of
> the class):
>
>    SomeClass::set_prop(key, value)
>
> In that case, you can define them as class methods:
>
>    class SomeClass
>      def self.[](key)
>        get_prop(key)
>      end
>      def self.[]=(key,value)
>         set_prop(key,value)
>      end
>    end
>
> And then simply return the class itself:
>
>    class MyClass
>       def props
>         SomeClass
>       end
>     end
>
> If you were using *instances* of SomeClass, then personally I would just
> define methods [] and []= as instance methods. Depending on how
> Hash-like you want this object to be, you may want to define some other
> methods too.
>
> If there is some particular reason why you can't do that, then you would
> have to return a proxy object, whose [] and []= methods are relayed to
> get_prop and set_prop on the underlying SomeClass object.
>
> If you still want props to return an actual Hash, then it will have to
> be a Hash which has been modified so that []= performs the operation on
> the underlying object.
>
> You can use delegate.rb, or you can explicitly delegate those methods
> which you want to. Here is some code from CouchTiny which wraps a Hash:
>
> module CouchTiny
>  # A class which delegates a small subset of methods to a Hash (to keep
>  # the space as clear as possible for accessor names)
>  class DelegateDoc
>    attr_accessor :doc
>
>    def initialize(doc = {})
>      @doc = doc.to_hash
>    end
>
>    def to_hash
>      @doc
>    end
>
>    def ==(other)
>      @doc == other # .to_hash is done by Hash#==
>    end
>
>    def to_json(*args)
>      @doc.to_json(*args)
>    end
>
>    alias :orig_respond_to? :respond_to?
>    def respond_to?(*m)
>      orig_respond_to?(*m) || @doc.respond_to?(*m)
>    end
>
>    def [](k)
>      @doc[k.to_s]
>    end
>
>    def []=(k,v)
>      @doc[k.to_s] = v
>    end
>
>    def key?(k)
>      @doc.key?(k)
>    end
>
>    def has_key?(k)
>      @doc.has_key?(k)
>    end
>
>    def delete(k)
>      @doc.delete(k)
>    end
>
>    def merge!(h)
>      @doc.merge!(h)
>    end
>
>    def update(h)
>      @doc.update(h)
>    end
>
>    def dup
>      self.class.new(@doc.dup)
>    end
>
>    #def method_missing(m, *args, &block)
>    #  @doc.__send__(m, *args, &block)
>    #end
>  end
> end
>
>
> Regards,
>
> Brian.
>
> --
> Posted via http://www.ruby-forum.com/.
>
>

In This Thread