埃菲尔:多行字符串格式化

时间:2019-01-26 15:21:42

标签: eiffel

找不到比这种方式更好的格式化多行字符串的方法了……似乎很复杂。格式化此类代码的最佳方法是什么?

{{1}}

1 个答案:

答案 0 :(得分: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