Ruby:字符串插值在第二次调用时首先打印函数
Ruby: String interpolation prints the function first when called second
这是我的小程序
def def1()
x = 1
puts x
end
def def2()
y = 2
puts y
end
puts "some text #{def1}"
puts "some text #{def2}"
这个例子的结果...
1
some text
2
some text
我不明白为什么要按这个顺序而不是 "sometext" 首先。
因为字符串是先创建的,也就是说调用def1
,然后整个字符串传入puts
.
我们可以展开puts "some text #{def1}"
出来理解。
string = "some text " + def1.to_s
puts string
如您所见,调用了 def1
来创建字符串。 def1
打印出 1 本身,它不 return 任何东西(它 returns nil
)。然后打印整个字符串。
这就是所有函数调用的工作方式。评估参数,调用函数。
您需要在打印前缀后调用 def1
。
print "some text "
def1
这就是为什么让一个函数 return 一个值比打印它本身更好的原因。
为了打印字符串,puts
必须知道字符串是什么。为了知道这个特定行中的字符串是什么:
puts "some text #{def1}"
Ruby 必须先调用 def1
。 def1
,依次调用 puts
打印一些东西。
这是我的小程序
def def1()
x = 1
puts x
end
def def2()
y = 2
puts y
end
puts "some text #{def1}"
puts "some text #{def2}"
这个例子的结果...
1
some text
2
some text
我不明白为什么要按这个顺序而不是 "sometext" 首先。
因为字符串是先创建的,也就是说调用def1
,然后整个字符串传入puts
.
我们可以展开puts "some text #{def1}"
出来理解。
string = "some text " + def1.to_s
puts string
如您所见,调用了 def1
来创建字符串。 def1
打印出 1 本身,它不 return 任何东西(它 returns nil
)。然后打印整个字符串。
这就是所有函数调用的工作方式。评估参数,调用函数。
您需要在打印前缀后调用 def1
。
print "some text "
def1
这就是为什么让一个函数 return 一个值比打印它本身更好的原因。
为了打印字符串,puts
必须知道字符串是什么。为了知道这个特定行中的字符串是什么:
puts "some text #{def1}"
Ruby 必须先调用 def1
。 def1
,依次调用 puts
打印一些东西。