我知道这可能是一个非常基本的问题,但我很难找到一个明确的答案。在Ruby中使用这个#{}是什么意思?它做了什么?
由于
答案 0 :(得分:6)
用于字符串插值:(wikipedia, ctrl+f "ruby")
apples = 4
puts "I have #{apples} apples"
# or
puts "I have %s apples" % apples
# or
puts "I have %{a} apples" % {a: apples}
输出将是:
I have 4 apples
String interpolation, Definition:
在Ruby中,字符串插值指的是双引号字符串执行Ruby代码并用该Ruby代码的评估替换部分字符串(用#{...}表示)的能力。
这是将数据(通常是变量的值,但它可以是任何Ruby代码的评估)注入字符串中间的最常用方法。
要知道的事情:
puts "This User name is #{User.create(username: 'Bobby')}!"
这将在用户的实例对象上对.to_s
进行隐式调用。
如果您在用户模型上定义了方法.to_s
:
class User
def to_s
self.username
end
它会输出:
puts "This User name is #{User.create(username: 'Bobby')}"
# => "This User name is Bobby"
答案 1 :(得分:1)
在Ruby中,有三种插值方式,#{}
只是一种方式。
apples = 4
puts "I have #{apples} apples"
# or
puts "I have %s apples" % apples
# or
puts "I have %{a} apples" % {a: apples}
答案 2 :(得分:1)
它被称为字符串插值
在Ruby中,字符串插值指的是double-quoted strings执行Ruby代码并用该Ruby代码的评估替换部分字符串(由#{...}表示)的能力。这是将数据(通常是变量的值,但它可以是任何Ruby代码的评估)注入字符串中间的最常用方法。
print "What is your name? "
name = gets.chomp
puts "Hello, #{name}"
请注意,任何代码都可以放在大括号内,而不仅仅是variable个名称。 Ruby将评估该代码以及返回的任何内容,它将尝试将其插入到字符串中。所以你可以轻松地说“Hello,#{gets.chomp}”并忘记名称变量。但是,最好不要在括号内放置长表达式。
答案 3 :(得分:0)
这允许您评估字符串中的任意ruby代码(仅限双引号)。例如,在PHP之类的东西中你可以做
$my_var = "The value of a = " . $a;
但是在红宝石中,你只是做
my_var = "The value of a = #{a}"
仅当字符串是双引号而不是单引号时才有效。如果我们使用单引号,那么您将在文本
中显示#{...}答案 4 :(得分:0)
您可以使用它来表示要打印或输出的变量。例如:
puts "#{var}"
会输出存储在变量var
中的值。