Julia中基于Vararg类型的多分派:避免元组调用connector函数
Julia中让
connector支持直接传多参数的简便方法 你当前的代码里connector只能接受元组作为参数,要改成直接传多个字符串参数,有两种简便实现方式:
方法一:直接定义可变参数版本的connector
直接把connector改成接受可变参数,不用额外定义元组类型,代码更简洁:
# 保留原有的f函数 f(DBTable::String) = "SELECT * FROM $DBTable" f(DBTable::String, date::String) = "SELECT * FROM $DBTable where date = $date" # 定义可变参数的connector function connector(a::String, rest::Vararg{String})::String # ... 这里保留你原来的逻辑代码 return f(a, rest...) # ... end # 现在可以直接这样调用 q1 = connector("my_table") q2 = connector("my_table", "'2024-02-12'")
这里用Vararg{String}表示可以接受任意数量的后续字符串参数,调用时直接传多个值就行,不需要打包成元组。
方法二:兼容原有代码的同时支持新调用方式
如果不想改动原有的connector(a::mytupletype)方法,可以新增一个可变参数的方法,自动把参数打包成元组调用原方法:
mytupletype = Tuple{String, Vararg{String}} f(DBTable::String) = "SELECT * FROM $DBTable" f(DBTable::String, date::String) = "SELECT * FROM $DBTable where date = $date" # 原有的接受元组的方法不变 function connector(a::mytupletype)::String # ... return f(a...) # ... end # 新增可变参数方法 connector(a::String, rest::Vararg{String}) = connector((a, rest...)) # 两种调用方式都能用 q1 = connector("my_table") q2 = connector("my_table", "'2024-02-12'") q3 = connector(("my_table",)) # 原来的调用方式依然有效
这样既保留了原有代码的兼容性,又实现了你想要的直接传多参数的调用方式。
内容的提问来源于stack exchange,提问作者montoisky
相关产品推荐
相关产品推荐

