只是想知道,有没有办法在Ruby中使用宏,以C的方式进行文本替换?
例如:
define ARGS 1,2
sum(ARGS) # returns 3
Run Code Online (Sandbox Code Playgroud)
编辑:更具体地说,我的问题看起来更像:
@button1 = FXButton.new(self, "Button 1",:opts => BUTTONPROPERTIES,:width => width, :height => height)
@button2 = FXButton.new(self, "Button 2",:opts => BUTTONPROPERTIES,:width => width, :height => height)
@button3 = FXButton.new(self, "Button 3",:opts => BUTTONPROPERTIES,:width => width, :height => height)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望代码看起来像:
@button1 = FXButton.new(self, "Button 1", ALLBUTTONPROPERTIES)
@button2 = FXButton.new(self, "Button 2", ALLBUTTONPROPERTIES)
@button3 = FXButton.new(self, "Button 3", ALLBUTTONPROPERTIES)
Run Code Online (Sandbox Code Playgroud)
注意如果我将它们设置为某个预定值,我将如何将"width"和"height"变量传递给FXButton类的初始化.是否有某种代码替换可以解决这个问题?
你不需要宏.只需定义一个变量或一个常量.
A = [1, 2]
A.inject(:+) # => 3
Run Code Online (Sandbox Code Playgroud)
编辑完问题后
你可以这样做:
ALLBUTTONPROPERTIES = ->{{opts: => BUTTONPROPERTIES, width: width, height: height}}
Run Code Online (Sandbox Code Playgroud)
并且其中常量和变量范围内BUTTONPROPERTIES,width,height被分配一定的价值,这样做:
@button1 = FXButton.new(self, "Button 1", ALLBUTTONPROPERTIES.call)
@button2 = FXButton.new(self, "Button 2", ALLBUTTONPROPERTIES.call)
@button3 = FXButton.new(self, "Button 3", ALLBUTTONPROPERTIES.call)
Run Code Online (Sandbox Code Playgroud)
可能还有另一种方法可以解决你想要做的事情.预处理器宏没有意义,因为Ruby不是编译语言,它是一种解释语言.
特别是对于你的例子,有一个非常干净的方法:
args = [1, 2]
sum(*args) # equivalent to sum( 1, 2 )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6717 次 |
| 最近记录: |