class Dates
ATTRS = {date_from: '', date_to: ''}
def set_dates(ATTRS)
@date_from = date_from
@date_to = date_to
end
def show_dates(ATTRS)
p date_from
p date_to
end
end
Dates.new.set_dates(date_from: Time.current, date_to: Time.current)
#-:4: formal argument cannot be a constant
# def set_dates(ATTRS)
# ^
#-:9: formal argument cannot be a constant
# def show_dates(ATTRS)
问题是:是否可以将方法属性存储在变量中?
答案 0 :(得分:4)
您可以在Ruby 2.0中使用新的关键字参数语法:
class Dates
def set_dates(date_from: '', date_to: '')
@date_from = date_from
@date_to = date_to
end
def show_dates
p @date_from
p @date_to
end
end
或Ruby 2.0之前的哈希参数:
class Dates
ATTRS = {date_from: '', date_to: ''}
def set_dates(attr)
attr = ATTRS.merge(attr)
@date_from = attr[:date_from]
@date_to = attr[:date_to]
end
def show_dates
p @date_from
p @date_to
end
end
对于show_dates
方法,我猜您的意思是显示Dates
实例的状态,因此我对其进行了一些修改。
此外,在Ruby中,以大写字母开头的变量被视为常量,不能将其用作方法的形式参数。
答案 1 :(得分:2)
我会使用Ruby(2.0.0 > =
)new keyword rest参数(**
)运算符编写如下代码:
class Dates
def set_dates(**attr)
@date_from,@date_to = attr.values_at(:date_from,:date_to)
end
def show_dates
p @date_from
p @date_to
end
end