我想做一些像
这样简单的事情alias set_then_do if
,因为
if x=true
puts "x is #{x}"
end
的工作原理。但是每个查看代码的人都会本能地想要将单个等号符号更改为两个('='到'==')。仅仅因为if字。但我希望在不混淆代码阅读器的情况下完成任务。所以我想要以下内容:
alias set_then_do if
set_then_do x=true
puts "x is #{x}"
end
我正在使用Ruby 1.9.3
回答问题的原因;这是我的样本案例。
if http.use_ssl = @use_ssl # ASSIGNMENT! NOT TESTING EQUALITY!
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.verify_depth = 9
end
这符合我的美学:
http.use_ssl = @use_ssl; if @use_ssl
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.verify_depth = 9
end
我仍然愿意回答别名if方法^ _ ^
答案 0 :(得分:4)
if
不是一种方法;这是一个关键字。 Ruby没有提供任何修改语法的工具,所以你不能这样做。
答案 1 :(得分:2)
我将以免责声明开头,我不建议这样做。但是,正如Chuck指出的那样,你不能做你想做的事,但你可以得到"关闭"。
此外,我同意set_then_do
是一个糟糕的名字,你可能想要一个不同的名字。也许do_if
代替。
说了这么多,你可以在全局名称空间中创建以下函数:
def do_if(val, &block)
yield if val
end
然后你想要使用它,你可以这样做:
do_if(http.use_ssl = @use_ssl) do
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.verify_depth = 9
end
同样,我不会推荐任何一种,但它确实接近你想要的。