我试图证明您可以将子例程存储在变量中(除非您不能)。我的这段代码有可能全错吗?
def printSample(str)
puts str
end
x = printSample
str = "Hello"
x(str)
Run Code Online (Sandbox Code Playgroud)
预期输出:
你好
我是 Ruby 的初学者,只是想学习基本代码。
您的 Python 代码可以转换为 Ruby,如下所示:
def print_sample(str)
puts str
end
x = method(:print_sample)
str = "Hello"
x.(str)
Run Code Online (Sandbox Code Playgroud)
主要区别在于,由于 Ruby 中的括号是可选的,因此编写时x = print_sample已经调用了该方法。检索稍后可以调用的Method对象有点复杂:您必须调用method方法名称并将其作为符号或字符串传递。(接收者是定义该方法的对象)
而且由于方法对象是常规对象,因此实际调用方法的语法也略有不同。红宝石提供:
x[str]
x.(str)
x.call(str)
Run Code Online (Sandbox Code Playgroud)
作为x.(str)的语法糖x.call(str),请参阅Method#call
send另一种方法是仅存储方法名称并通过/动态调用该方法public_send,例如:
x = :print_sample
str = "Hello"
send(x, str)
Run Code Online (Sandbox Code Playgroud)
在 Ruby 中,通过(符号化)名称引用方法是非常惯用的。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |