【问题标题】:Eiffel: multilines string formattingEiffel:多行字符串格式化
【发布时间】:2019-01-26 15:21:42
【问题描述】:

没有找到比这种方式更好的格式化多行字符串的方法......看起来很复杂。格式化此类代码的最佳方法是什么?

l_qry := "SELECT%
    %    * %
    %FROM %
    %    enumerate %
    %WHERE %
    %    " + {like item_prototype}.Primary_key_db_column_name + " = " + l_category_id + " %
    %UNION %
    %   SELECT %
    %       e.* %
    %   FROM %
    %       enumerate e %
    %INNER JOIN  %
    %   enumerates_leaves s ON s." + {like item_prototype}.Primary_key_db_column_name + " = e." + {like item_prototype}.Category_db_column_name + " %
    %) SELECT * FROM enumerates_leaves WHERE enumerates_leaves." + {like item_prototype}.Category_db_column_name + " IS NOT NULL;"

【问题讨论】:

    标签: eiffel


    【解决方案1】:

    您可以为此使用Verbatin Strings

    sql_select_country : STRING = "[ 
             SELECT * 
             from COUNTRY
    ]"
            -- Select all country
    

    为了动态构建 SQL 查询,您可以定义一个模板 用占位符,然后用预期值替换它们。

    template_query : STRING = "[
        SELECT
            * 
        FROM 
            enumerate 
        WHERE 
            $Primary_key_db_column_name  = :id 
        UNION 
           SELECT 
               e.* 
           FROM 
               enumerate e 
        INNER JOIN  
           enumerates_leaves s ON s.$Primary_key_db_column_name = e.$Category_db_column_name 
        ) SELECT * FROM enumerates_leaves WHERE enumerates_leaves.$Category_db_column_name IS NOT NULL;"
    ]"
        -- Template query `query_name` ....
    

    使用模板

    l_query: STRING
    
    create l_query.make_from_string (template_query)
    l_query.replace_substring_all ("$Primary_key_db_column_name", {like item_prototype}.Primary_key_db_column_name)
    ...
    

    事实上,可以将这个想法概括为构建类似的东西

    sql_query_builder (query_template: READABLE_STRING_GENERAL; arguments: ITERABLE [READABLE_STRING_GENERAL]) :STRING
    

    【讨论】:

    • 谢谢!我试过了,但没有找到如何与 + 运算符结合而不弄乱它......你能在你的例子中添加它吗?
    猜你喜欢
    • 2018-05-20
    • 2018-05-22
    • 2018-08-12
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多