El0*_*El0 1 ruby string-interpolation
我对Ruby很新,并且总是假设这两个符号是插入实例变量的相同方式,直到我注意到下面的示例代码中'vendor'参数的不同之处.
class Component
def initialize(name, version)
@vendor = "vendor"
@name = name
@version = version
puts "#{@vendor}-@#{name}-@#{version}"
end
end
ConfiguredComponent.new("param1", "param2")
Run Code Online (Sandbox Code Playgroud)
=>这个有效
class Component
def initialize(name, version)
@vendor = "vendor"
@name = name
@version = version
puts "@#{vendor}-@#{name}-@#{version}"
end
end
ConfiguredComponent.new("param1", "param2")
Run Code Online (Sandbox Code Playgroud)
=>使用@#vendor}表示法不起作用=> :'initialize':未定义的局部变量或方法`vendor'for#(NameError)
class Component
def initialize(name, version)
@vendor = "vendor"
@name = name
@version = version
puts "#{@vendor}-#{@name}-#{@version}"
end
end
Component.new("param1", "param2")
Run Code Online (Sandbox Code Playgroud)
=>这也有效
这#{(expression)}是重要的.
如果表达式是#{name}那么替换name所有示例中的变量来自输入到方法中的参数.
如果表达式是#{@name}那么替换在@name方法的第四行中定义的变量.
@#{name}不是一个特殊的结构.它只是字符串@后跟变量的内容name.
它在你的第二个例子中不起作用的原因是你根本没有定义变量vendor.
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |