Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ruby中我们自己的自定义方法在ruby中创建对象_Ruby_Metaprogramming - Fatal编程技术网

使用ruby中我们自己的自定义方法在ruby中创建对象

使用ruby中我们自己的自定义方法在ruby中创建对象,ruby,metaprogramming,Ruby,Metaprogramming,我需要用我自己的自定义方法在ruby中创建一个对象,而不是默认的new() 如果需要使用generate()为用户创建对象,请说明如何实现。 所以当我打字的时候 obj = User.generate 它应该创建一个用户的对象 我理解的一种方法是使用alias关键字对方法进行别名 虽然我不确定 有什么建议吗?在用户类中创建一个名为生成的类方法在用户类中创建一个名为生成的类方法您可以调用特定的方法并在其中调用self.new class User def self.generate

我需要用我自己的自定义方法在ruby中创建一个对象,而不是默认的new()

如果需要使用generate()为用户创建对象,请说明如何实现。 所以当我打字的时候

obj = User.generate
它应该创建一个用户的对象

我理解的一种方法是使用alias关键字对方法进行别名

虽然我不确定


有什么建议吗?

用户
类中创建一个名为
生成
的类方法在
用户
类中创建一个名为
生成
的类方法

您可以调用特定的方法并在其中调用self.new

class User
  def self.generate
    new
  end
end
class User
  def self.generate
    self.new
  end
end

obj = User.generate

您可以调用特定的方法,并在其中调用self.new

class User
  def self.generate
    self.new
  end
end

obj = User.generate

正如您所说,您只需
alias\u方法
it即可:

 class << User
   alias_method :generate, :new
 end
或者,您可以重新实现
Class#new
的功能:

class User
  def self.generate(*args, &blk)
    obj = allocate
    obj.send(:initialize, *args, &blk)
    obj
  end
end

正如您所说,您只需
alias\u方法
it即可:

 class << User
   alias_method :generate, :new
 end
或者,您可以重新实现
Class#new
的功能:

class User
  def self.generate(*args, &blk)
    obj = allocate
    obj.send(:initialize, *args, &blk)
    obj
  end
end

这样做:
类用户;def自生成;放上“现在怎么样,棕色奶牛?”;结束;结束
?是的,正如其他人在下面发布的一样。但是请不要把它写在一张纸上line@CarySwoveland不确定,但我希望第一条评论是对答案的讽刺,除非我在文档中遗漏了它,我认为《新代码》从未发布过《现在怎么样,布朗牛?:)@PiotrKruczek这不是真正的答案,因为OP想知道如何创建一个
generate
方法,该方法的行为类似于
new
,而您的答案并未涵盖该方法;def自生成;放上“现在怎么样,棕色奶牛?”;结束;结束?是的,正如其他人在下面发布的一样。但是请不要把它写在一张纸上line@CarySwoveland不确定,但我希望第一条评论是对答案的讽刺,除非我在文档中遗漏了它,我认为《新代码》从未发布过《现在怎么样,布朗牛?:)@PiotrKruczek这不是真正的答案,因为OP想知道如何创建一个类似于
new
generate
方法,而你的答案没有涵盖。你为什么需要这个?我假设
new
不能满足您的需求是有特定原因的,否则只需使用
new
。您为什么需要这个?我假设
new
不能满足您的需求是有特定原因的,否则只需使用
new