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

时间:2014-02-10 15:29:14

标签: ruby

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

文件名:display.rb

class Print
  def initialize(name)
    @name = name
  end 
  def disp
    p @name
  end
end

init = Print.new(ARGV[0])
init.disp

终端

> ruby display.rb "ross"
# => "ross"

[编辑] 我不想在文件中调用init = Print.new(ARGV[0])init.disp;相反,我想将它作为命令行参数ruby display.rb "ross"传递,它应该显示名称。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

但我认为你真的在问你是否可以创建并调用类方法。

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

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

Print.disp(ARGV[0])

你会这样称呼它:

$ ruby display.rb Ross

它会输出:

Ross

答案 2 :(得分:1)

如果您没有使用类,只需运行直接的Ruby代码,就可以调用ruby display.rb "ross"。例如,假设您的文件如下所示:

puts ARGV[0]

您现在可以将其作为ruby display.rb "ross"运行,并且您的参数将被打印。

另一种选择是设置你的功能:

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

在这种情况下,您可以直接从类中调用函数,而无需实例化该类。对于您想要实现的目标,这可能是您最好的解决方案。

Print.disp(ARGV[0])

答案 3 :(得分:1)

这是一个想法。之后加载rb文件并执行一些内联​​ruby:

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