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

u4crella · 2019年11月18日 · 最后由 SunA0 回复于 2020年11月12日 · 3141 次阅读

声明一个函数而先不定义它的具体功能,像 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

如果你问的是函数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 语言精华在头文件

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

msl12 回复

维护公司十年老项目,因为业务代码太多前人疏于维护,一个核心 model 里面存了好几十个方法。有时候想实现个功能,不仔细看 model 还真没发现已经写好了。提前定义可能方便查看吧😓 😓 😓 😓 😓 😓

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