Ruby 调用类方法内联以创建新对象

Ruby 调用类方法内联以创建新对象,ruby,Ruby,试图弄清楚我是否可以在不创建新对象的情况下将参数传递给类。我试了如下 文件名:display.rb 终点站 [EDIT]我不想调用文件中的init=Print.new(ARGV[0])和init.disp;相反,我想将它作为命令行参数传递给ruby display.rb“ross”,它应该显示名称。如何实现这一点?在脚本中添加选项解析器,然后从选项解析器中正确实例化Print类。选项解析器将处理ARGV数组中的读取工作,您可以按照预期的方式以OO方式使用Print类。向脚本中添加选项解析器,然后

试图弄清楚我是否可以在不创建新对象的情况下将参数传递给类。我试了如下

文件名:display.rb

终点站


[EDIT]我不想调用文件中的
init=Print.new(ARGV[0])
init.disp
;相反,我想将它作为命令行参数传递给ruby display.rb“ross”,它应该显示名称。如何实现这一点?

在脚本中添加选项解析器,然后从选项解析器中正确实例化Print类。选项解析器将处理ARGV数组中的读取工作,您可以按照预期的方式以OO方式使用Print类。

向脚本中添加选项解析器,然后从选项解析器中正确实例化Print类。选项解析器将处理ARGV数组中的读取工作,您可以按照预期的方式使用Print类。

您可以使用allocate方法创建类的对象

但我认为您实际上是在问是否可以创建和调用类方法

Print.disp(ARGV[0])
肯定可以完成

class Print
  def self.disp(something)
    puts something
  end
end

Print.disp(ARGV[0])
你会这样称呼它:

puts ARGV[0]
class Print
  def self.disp(yourinput)
    puts yourinput
  end
end
$ruby display.rb Ross

它将输出:


Ross

您可以使用allocate方法创建类的对象

但我认为您实际上是在问是否可以创建和调用类方法

Print.disp(ARGV[0])
肯定可以完成

class Print
  def self.disp(something)
    puts something
  end
end

Print.disp(ARGV[0])
你会这样称呼它:

puts ARGV[0]
class Print
  def self.disp(yourinput)
    puts yourinput
  end
end
$ruby display.rb Ross

它将输出:


Ross

如果您没有使用类,只是直接运行ruby代码,那么可以调用
ruby display.rb“Ross”
。例如,假设您的文件如下所示:

puts ARGV[0]
class Print
  def self.disp(yourinput)
    puts yourinput
  end
end
您现在可以将其作为ruby display.rb“ross”运行,您的参数将被打印出来

另一个选项是如下设置您的函数:

puts ARGV[0]
class Print
  def self.disp(yourinput)
    puts yourinput
  end
end
在这种情况下,您可以直接从类调用函数,而无需实例化类。对于您正在努力实现的目标,这可能是您最好的解决方案

Print.disp(ARGV[0])

如果不使用类,只运行直接的ruby代码,那么可以调用ruby display.rb“ross”。例如,假设您的文件如下所示:

puts ARGV[0]
class Print
  def self.disp(yourinput)
    puts yourinput
  end
end
您现在可以将其作为ruby display.rb“ross”运行,您的参数将被打印出来

另一个选项是如下设置您的函数:

puts ARGV[0]
class Print
  def self.disp(yourinput)
    puts yourinput
  end
end
在这种情况下,您可以直接从类调用函数,而无需实例化类。对于您正在努力实现的目标,这可能是您最好的解决方案

Print.disp(ARGV[0])

有个主意。加载rb文件,然后执行一些内联ruby:

ruby -r"./display.rb" -e "Print.new('ross').disp"

有个主意。加载rb文件,然后执行一些内联ruby:

ruby -r"./display.rb" -e "Print.new('ross').disp"

您不想调用
Print.new
的任何原因?@stefan:我不想在文件中使用Class.new。我想将参数与文件名一起传递给这个文件,并且应该初始化这个类。为了初始化一个类,您可以对它调用.new。如果你不想初始化一个类,你就不需要对它调用.new。更准确地说,如果您调用.new,该类的实例将被初始化。您不想调用
Print.new
?@stefan:我不想在文件中使用class.new。我想将参数与文件名一起传递给这个文件,并且应该初始化这个类。为了初始化一个类,您可以对它调用.new。如果你不想初始化一个类,你就不需要对它调用.new。更准确地说,如果调用.new,该类的实例将被初始化。这不符合问题中的“我不想使用.new”部分。除非赋值变量
init
的部分是要避免的。还是不太清楚。@vgoff OP说[我不想使用.new]。。。在文件中,这让我觉得OP不想修改现有的文件。对我来说,标题在如何阅读问题的其余部分中占有很大比重。这更多地反映了问题不清楚,而不是你的答案。这与问题中的“我不想使用。新”部分不符。除非赋值变量
init
的部分是要避免的。还是不太清楚。@vgoff OP说[我不想使用.new]。。。在文件中,这让我觉得OP不想修改现有的文件。对我来说,标题在如何阅读问题的其余部分中占有很大比重。这更多地反映了问题不明确,而不是你的答案。