在 Ruby 中定义涉及变量的常量字符串的最简洁方法是什么?

Ter*_*ers 6 ruby calabash

在某些情况下,我的很多代码都具有相同的文本行(我们正在使用 Calabash 进行 iOS 自动化,如果这能让您有想法的话)。

例如:“所有标签标记为:'#{name}'”在特定类中使用了 8 次。

我希望能够有一个使用该文本的常量,但是如果我将它放在类的顶部,当然还没有设置变量“name”。如果没有定义一个接受参数并返回一个字符串的方法,有没有办法做一些本质上像这样的事情,它可以存在于类的顶部,但在使用之前不会被评估?:

class ClassName
  extend Calabash::Cucumber::Operations

  @NAME_CONSTANT = "all label marked:'#{name}'"

  def self.method_name(name)
    query("#{@NAME_CONSTANT} sibling label marked:'anotherLabel' isHidden:0")
  end
end
Run Code Online (Sandbox Code Playgroud)

如果你使用我提到的语法,你会得到这个错误:未定义的局部变量或 ClassName 的方法`name'

Jus*_* Ko 4

您可以稍后使用String#%插入字符串。

class ClassName
    @NAME_CONSTANT = "all label marked:'%{name}'"

    def self.method_name(insert_name)
        query("#{@NAME_CONSTANT} sibling label marked:'anotherLabel' isHidden:0" % {name: insert_name})
    end

    def self.query(string)
        puts string
    end 
end 

ClassName.method_name('test')
#=> "all label marked:'test' sibling label marked:'anotherLabel' isHidden:0"
Run Code Online (Sandbox Code Playgroud)