Ruby 如何仅将类中单个方法设为public且无需反复切换访问控制标识
Ruby单方法设置public权限的优雅方案
方案1:全版本兼容的显式声明
在方法定义完成后,直接调用public方法传入对应方法名的符号即可,该操作仅作用于指定方法,不会修改后续方法的默认访问权限,无需反复切换权限块:
class Airplane def preflight end def engine_start return unless preflight_complete? end private def preflight_complete? end # 保持业务逻辑相关的方法相邻排列 def calculate_fuel_load end # 仅将该方法单独设置为public public :calculate_fuel_load # 后续方法依然保持private权限,无需重复声明private def check_weather end end
方案2:Ruby 2.1+ 更简洁的内联写法
Ruby 2.1及以上版本支持直接在def关键字前加权限修饰符,修饰符仅作用于当前定义的方法,不会影响后续方法的默认权限,和方法定义绑定更直观:
class Airplane # 省略前面的代码... private def preflight_complete? end # 定义时直接标注为public,后续方法默认还是private public def calculate_fuel_load end def check_weather end end
两种方案都满足不移动方法位置、不切换全局权限块、不会导致后续新增方法意外设置为public的需求,可根据项目使用的Ruby版本选择对应写法。
内容的提问来源于stack exchange,提问作者David Hempy
相关产品推荐
相关产品推荐

