声明一个函数而先不定义它的具体功能,像 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)
具体功能什么时候定义呢? 你可以看看 Proc lambda,可以传入 block 然后执行 block
如果你问的是函数a和b之间会相互引用,如何提前声明b,那么答案是不需要。因为在你定义这两个函数而没有实际调用的时候,里面的作用域是不会被检查的。
a
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 语言精华在头文件
想要这么做的好处是什么?
维护公司十年老项目,因为业务代码太多前人疏于维护,一个核心 model 里面存了好几十个方法。有时候想实现个功能,不仔细看 model 还真没发现已经写好了。提前定义可能方便查看吧