The block that you pass to define_method can include some parameters. That's how your defined method accepts arguments. When you define a method you're really just nicknaming the block and keeping a reference to it in the class. The parameters come with the block. So:
define_method(:say_hi) { |other| puts "Hi, " + other }
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…