ruby-pass接收器作为方法中的参数

ruby-pass接收器作为方法中的参数,ruby,Ruby,我试图弄清楚如何在不使用参数的情况下在接收器上传递我的“get_hostname”方法 例如: class Hostname def initialize(hostname) @hostname = hostname def get_hostname(hostname) b = hostname.split(/[0-9]/) a = new.Hostname("prod-srv-1") 现在,我想可以称之为: b = a.get_hostna

我试图弄清楚如何在不使用参数的情况下在接收器上传递我的“get_hostname”方法

例如:

class Hostname
    def initialize(hostname)
        @hostname = hostname

    def get_hostname(hostname)
        b = hostname.split(/[0-9]/)

a = new.Hostname("prod-srv-1")
现在,我想可以称之为:

b = a.get_hostname
但是,如果不将“a”作为参数传递,并使get_hostname成为一个类方法,我无法找到一种方法来实现这一点,如:

def self.get_hostname(hostname)
    b = Hostname.split(/[0-9]/)
然后我可以做:

b = Hostname.get_hostname(a)

但是,我想再次传递接收者,而不需要像第一个示例中那样的参数。这是可能的吗?

您可以使用initialize方法中定义的
@hostname
实例变量,然后在
get\u hostname
方法中工作:

class Hostname
  def initialize(hostname)
    @hostname = hostname
  end
  def get_hostname
    b = @hostname.split(/[0-9]/)
  end
end

hostname = Hostname.new('prod-srv-1')
p hostname.get_hostname
# => ["prod-srv-"]

虽然我不确定你想用
.split(/[0-9]/)
做什么。你的代码看起来像Python。你的代码在语法上不是有效的Ruby。如果代码甚至不能被解析,那么考虑代码的语义是没有意义的。