gpt4 book ai didi

ruby - Ruby 中的 "#@{var}"和 "@#{var}"有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:38 26 4
gpt4 key购买 nike

我是 Ruby 的新手,一直认为这两种表示法是插入实例变量的相同方式,直到我注意到下面示例代码中“vendor”参数的差异。

class Component
def initialize(name, version)
@vendor = "vendor"
@name = name
@version = version
puts "#{@vendor}-@#{name}-@#{version}"
end
end

ConfiguredComponent.new("param1", "param2")

=> 这行得通

class Component
def initialize(name, version)
@vendor = "vendor"
@name = name
@version = version
puts "@#{vendor}-@#{name}-@#{version}"
end
end

ConfiguredComponent.new("param1", "param2")

=> 使用@#{vendor} 符号不起作用=> :in 'initialize': undefined local variable or method `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")

=> 这也行

最佳答案

重要的是 #{(expression)}

如果表达式是 #{name},那么它会替换变量 name,在您的所有示例中,该变量都来自输入到方法中的参数。

如果表达式是 #{@name} 那么它会替换在您的方法的第四行中定义的变量 @name

@#{name} 不是特殊结构。它只是字符串 @ 后跟变量 name 的内容。

它在您的第二个示例中不起作用的原因是您根本没有定义变量 vendor

关于ruby - Ruby 中的 "#@{var}"和 "@#{var}"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com