【问题标题】:Ruby - Can variable set equal to object of custom class transfer custom class to the variable?Ruby - 变量设置等于自定义类的对象可以将自定义类转移到变量吗?
【发布时间】:2014-05-23 15:11:55
【问题描述】:
class New_Class
   def initialize
      @array = ['1A','2A','1B','2C']
   end
   def remove_letters
      @array.map do |rmv|
         rmv.sub /([0-9])([A-Z])/, '\1'
      end
   end
   def show_array
      @array.each do |element|
         puts element
      end
   end
end

array = New_Class.new
new_array = array.remove_letters
puts new_array.class #=> Array
new_array.each do |element|
   puts element   #=>1,2,1,2
end
array.show_array   #=>1A,2A,1B,2C
new_array.show_array   #=>Undefined method error since it's an object of type Array not New_Class

如何使 new_array 成为 New_Class 类型的对象而不是 Array? 这不起作用:

new_array = New_Class.new
new_array = array.remove_letters 

仍然说 new_array 是 Array 类型。

我玩弄了 clone 和 dup,但也无法让它以这种方式工作。谢谢!

【问题讨论】:

  • 旁注,Ruby 的惯例是使用 2 空格缩进,而不是 4 空格。
  • 你到底想做什么?这一切是为了什么?
  • 我有一个自定义类的数组,可以在整个程序中更改长度。在任何时候,我都需要从该数组派生一个数组,但没有字母。然后,我需要在使用所述类的方法时将派生数组与该自定义类的其他数组进行比较。我真正在做的事情稍微复杂一些,但与我的示例中的逻辑相同。

标签: ruby arrays class object inheritance


【解决方案1】:

您的remove_letters 方法返回一个数组,然后您将其分配给new_array。如果您希望 new_array 成为 New_Class 的另一个实例,那么您需要从您的 remove_letters 方法返回另一个 NewClass 实例,而不是数组:

def initialize(values = ['1A','2A','1B','2C']) 
  @array = values
end

def remove_letters
  New_Class.new(@array.map { |rmv| rmv.sub(/([0-9])([A-Z])/, '\1') })      
end

上面,我修改initialize 以使用您的数组作为默认值,如果初始数组值没有传递给New_Class.new,那么它使用['1A','2A','1B','2C'] 作为默认值。

【讨论】:

  • 完美。谢谢我已经为此苦苦挣扎了一段时间。
  • @quelleck 如果您觉得我对您的问题的回答令您满意,请考虑接受我的回答,并在您获得足够的声望(这是 15 次代表)后点赞。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2020-04-27
  • 2011-09-02
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
相关资源
最近更新 更多