Tag: setter

Ruby – 哈希属性的Setter方法

通过将笔和纸RPG转换为脚本,我一直在使用Ruby。 现在我有一个角色的统计数据保存在哈希中,我希望能够通过公共方法设置。 我得到了这个: class Character attr_reader :str, :con, :dex, :wis, :int, :level, :mods, :stats def initialize str, con, dex, wis, int, cha, level = 1 @stats = { :str => str, :con => con, :dex => dex, :wis => wis, :int => int, :cha => cha } @mods = {} @level = level @stats.each_pair do […]

Mongoid定制的setter / getters和super

我正在尝试修改属性Mongoid模型上的setter,但与ActiveRecord不同,我不能调用super来让Mongoid实际设置属性,因为模型使用include Mongoid::Document而不是ActiveRecord::Base的子类。 我希望能够做这样的事情。 class User include Mongoid::Document embeds_one :email_account def email_account=(_email_account) ret = super puts “email account updated!” do_something ret end end 除了,因为它不是一个子类,产生 NoMethodError: super: no superclass method 想法? 编辑: 你会怎么做一个吸气剂,比如 class User include Mongoid::Document embeds_one :email_address def email_address super || “myself@gmail.com” end end

迭代并设置Ruby对象实例变量

我正在寻找一种方法来迭代Ruby对象的实例变量,并使用通用setter单独设置它们(从提供的哈希)。 我假设我可以直接在方法中迭代它们并简单地单独设置它们。 这是我的对象实例,你: u = # 我想用给定的哈希填充它,h: h = { “id”=>”141”, “alpha”=>”Muccahiya”” “bravo”=>”$2a$10$xR2g”, “charlie”=>”2018-02-21 10:41:56-05”, “delta”=>”2018-02-05 18:17:16.752606-05”, “echo”=>”wobbly”, “status”=>”active” } 这是我的方法,它抛出这个错误: def to_obj(h) self.instance_variables.each do |i| self.i = h[i.sub(‘@’,”)] end end 错误: Traceback (most recent call last): 3: from /users/rich/app.rb:31:in `’ 2: from /Library/WebServer/Documents/dingbat/models/waffle.rb:240:in `to_obj’ 1: from /Library/WebServer/Documents/dingbat/models/waffle.rb:240:in `each’ /Library/WebServer/Documents/dingbat/models/waffle.rb:241:in `block in to_obj’: no implicit […]

创建一个在Ruby中获取额外参数的setter方法

我正在尝试编写一个充当setter的方法,除了赋值之外还需要一些额外的参数。 愚蠢的例子: class WordGenerator def []=(letter, position, allowed) puts “#{letter}#{allowed ? ‘ now’ : ‘ no longer’} allowed at #{position}” end def allow=(letter, position, allowed) # … end end 把它写成索引器是有效的,我可以像这样调用它: gen = WordGenerator.new gen[‘a’, 1] = true # or explicitly: gen.[]=(‘a’, 1, true) 但当我尝试以下任何一种情况时,口译员会抱怨: gen.allow(‘a’, 1) = false # syntax error gen.allow=(‘a’, 1, false) # […]