Ruby 大家好,问一个 Ruby 的基础问题。

afghl · 2015年08月22日 · 最后由 douxiance 回复于 2015年08月22日 · 2060 次阅读

实在不好意思。写 ror 已经大半年了。一些 ruby 基础的语法还有点不清楚。

具体是这样的。

一个项目是要生成一个图片。而图片里涉及大量的日期计算。

所以我们的设计如下:

简单就是 module TickerGenerator 放在 lib 下。

TickerGenerator::Base include 了 TickerGenerator::DateCalc TickerGenerator::Ttc < Base

但是我在 TickerGenerator::Ttc 的 initialize 时 start_date = @options.date 没有给 DateCalc 的 start_date= 赋值。

高手能解答一下么?

我要如何实现这个效果呢?

update 一下。

写成

send 'start_date=', @options.date

就正常了。。

真奇怪。和 module 无关。

发代码不要用截图。

start_date = @options.date的意思是定义一个 local variable,然后赋值给它,而不会调用start_date=。正确的写法是self.start_date = @options.date

另外,不必为 accessors 写方法,查一下怎么用attr_accessor

第一点 @yanhao解释的比较清楚了

@afghl 的方法是可行的,用到了元编程中的 send 方法。

send 'start_date=', @options.date

功能等价于@yanhao

self.start_date = @options.date

有关self 用法及作用域,可以看看 http://www.cnblogs.com/cnblogsfans/archive/2009/02/11/1388661.html

第二点 关于attr_accessor的使用

attr_accessor :start_date,:end_date

等价于

def start_date @start_date end

def end_date @end_date end

def start_date=(date) @start_date=date end

def end_date=(date) @end_date=date end

需要 登录 后方可回复, 如果你还没有账号请 注册新账号