论坛首页 入门讨论版 ruby

初学,有个代码需要解释一二

浏览 481 次
该帖已经被评为新手帖
作者 正文
最后更新时间:2008-03-15
不是很细心看教学章节,直接拿来一个程序来识读,在某些局部方面希望资深者指导,
在红色备注方面给与帮助
  module Calculator

  class Adder
    def compute( a, b )
      a.to_f + b.to_f
    end
  end

  class Subtractor
    def compute( a, b )
      a.to_f - b.to_f
    end
  end

  class Multiplier
    def compute( a, b )
      a.to_f * b.to_f
    end
  end

  class Divider
    def compute( a, b )
      a.to_f / b.to_f
    end
  end

  class Sine
    def compute( a )
      Math.sin( a )
    end
  end

  #定义一个计算类,注意其中
  # method_missing 
  # respond_to 
  class Calculator
    def initialize( operations )
      @operations = operations
    end

    def method_missing( op, *args )
      if @operations.has_key?(op)
        @operations[op].compute( *args )
      else
        super
      end
    end

    def respond_to?( op )
      @operations.has_key?(op) or super
    end
  end


  def register_services( registry )
    registry.namespace! :calc do
      namespace! :operations do
        add      { Adder.new      }
        subtract { Subtractor.new }
        multiply { Multiplier.new }
        divide   { Divider.new    }
        sin      { Sine.new       }
      end

      calculator { Calculator.new( operations ) }
    end
  end
  module_function :register_services

end
 
知道这段代码是一个定义加,减,乘,除的包文件,其中,语法中有些没搞清楚:
1. 像这样 xxx ! symbol 表示啥意思? 定义符号?
2. 类calculator,其中定义了2个方法,这2个方法是从默认的Object继承来的吗?
3.对类变量操作中有个has_key?是判断什么?是哈希表操作?
4.在register_server中操作:
do
        add      { Adder.new      }
        subtract { Subtractor.new }
        multiply { Multiplier.new }
        divide   { Divider.new    }
        sin      { Sine.new       }
 end
这个是做啥啊,建立哈希表,还是对块命名?
郁闷,觉得ruby有些代码还是有些看不懂,不像其他语言,拿来就能读懂,而ruby语言太丰富了。
某些方面像猜谜一样。
ruby基础扫了几遍,枝枝节节太琐碎,灵活有余但感觉上手需要花些时间。

 

   
最后更新时间:2008-03-18
1. 像这样 xxx ! symbol 表示啥意思? 定义符号?
!说明函数xxx会修改对象的内部状态,和xxx?的相对,symbol就是传递给函数的参数

2. 类calculator,其中定义了2个方法,这2个方法是从默认的Object继承来的吗?
是的

3.对类变量操作中有个has_key?是判断什么?是哈希表操作?
当然了。

4.在register_server中操作:
嵌套的block

ruby的确比较灵活,需要掌握的东西比较繁琐,但是多看书,多看代码,多写写,ruby没我们想得那么复杂。
   
0 请登录后投票
最后更新时间:2008-03-18
既然你不好好看教程,为什么又要到这里问?我真想直接给这个帖子弄个新手贴……
   
0 请登录后投票
最后更新时间:2008-03-20
我教程通看了几次,哪里记得那么多细节
的确承认我不够仔细,但是让我像以前学c语言,从printf("%s",Hello world)开始
写实在是太不可能了。

现在很多时候,拿起语言就写一段自己所要的功能,不懂的就翻资料看啊,
但偏偏ruby资料分门别类的有些方面就像找地图。
比如下面的正则表达式,我还没看懂这个im在ruby表示啥意思,,
def parse_html(data,tag)
   return data.scan(%r{<#{tag}\s*.*?>(.*?)</#{tag}>}im).flatten
end

通看了ruby的正则,后面要是跟个n啊,数字类就表示匹配几个,im莫非也是和n一样,表示任意个?
   
0 请登录后投票
论坛首页 入门讨论版 ruby

跳转论坛:
JavaEye推荐