You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中实现支持代码块初始化的可调用属性on_start

Ruby中通过代码块设置回调属性的实现

你要实现的是**回调(Callback)**模式,核心是把代码块转换成Proc对象保存,后续触发执行。默认的attr_accessor生成的setter方法无法直接接收代码块,需要自定义方法来处理:

基础实现代码

class SchedulingManager
  # 自定义on_start方法,接收代码块并保存为Proc对象
  def on_start(&block)
    @on_start = block
  end

  def call
    # 执行保存的代码块,先判断是否存在避免空调用报错
    @on_start.call if @on_start
  end
end

# 使用示例
scheduling = SchedulingManager.new
scheduling.on_start do
  puts "hello"
end
scheduling.call # 输出: hello

扩展优化(支持属性读取)

如果需要同时支持读取on_start属性,可以调整为:

class SchedulingManager
  attr_reader :on_start

  def on_start(&block)
    @on_start = block if block_given?
    @on_start
  end

  def call
    on_start.call if on_start
  end
end

原理说明

  • 方法参数前加&符号,会把传入的代码块自动转换成Proc对象
  • 保存这个Proc后,通过call方法就能执行代码块内的逻辑
  • 这种模式在Ruby生态中很常见,比如Rails的生命周期回调、各类框架的事件监听都基于类似思路

内容的提问来源于stack exchange,提问作者Dedy Puji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:01:13