新手问题 声明一个函数而先不定义它的具体功能

u4crella · 2019年11月18日 · 最后由 msl12 回复于 2019年12月07日 · 902 次阅读

声明一个函数而先不定义它的具体功能,像c语言那样可以吗? 代码3.rb:

require './1.rb'
### in file 1.rb::
#m = 6 + f(2)
###
require './2.rb'
### in file 2.rb::
#def f(x)
#  return (m + x * x)
#end
###
puts f(3)
共收到 7 条回复

具体功能什么时候定义呢? 你可以看看Proc lambda,可以传入block 然后执行block

如果你问的是函数ab之间会相互引用,如何提前声明b,那么答案是不需要。因为在你定义这两个函数而没有实际调用的时候,里面的作用域是不会被检查的。

ruby是解释执行的语言,与C语言不一样的一点是没有编译期。执行3.rb的时候,已经是在运行期,此时先执行1.rb,1.rb里面找不到函数f的定义就会报错。

简单,可以先定义一个空函数:

#1.rb
def f(x)
  puts " f()未定义" 
end

再定义实际使用的函数:

#2.rb
def f(x)
  puts "f() 已定义" 
end

然后在3.rb里, require '2.rb' 就可以了。

换Go可以实现你要的

C语言精华在头文件

想要这么做的好处是什么?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册