Ну, я предложил бы, чтобы сам вопрос был перефразирован. Интерфейсы являются главным образом контрактами, которые получает класс, реализация того контракта самого будет варьироваться. Абстрактный класс будет обычно содержать некоторую логику умолчания, и ее дочерние классы добавят еще некоторую логику. Я сказал бы, что ответ на вопросы полагается на ромбовидную проблему. Java предотвращает множественное наследование для предотвращения его. ( http://en.wikipedia.org/wiki/Diamond_problem ).
Прямо сейчас я использую:
TO_IGNORE=(
E201 # Whitespace after '('
E301 # Expected N blank lines, found M
E303 # Too many blank lines (pep8 gets confused by comments)
)
ARGS="--ignore `echo ${TO_IGNORE[@]} | tr ' ' ','`"
Что работает, но (в общем случае) ужасно ломается, если в элементах массива есть пробелы.
(Для тех, кто заинтересован, это сценарий-оболочка вокруг pep8.py )
Этот подход заботится о пробелах внутри значений, но требует цикла:
#!/bin/bash
FOO=( a b c )
BAR=""
for index in ${!FOO[*]}
do
BAR="$BAR,${FOO[$index]}"
done
echo ${BAR:1}
Возможно, например,
SAVE_IFS="$IFS"
IFS=","
FOOJOIN="${FOO[*]}"
IFS="$SAVE_IFS"
echo "$FOOJOIN"
Еще одно решение:
#!/bin/bash
foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}
echo $bar
Edit: то же самое, но для многосимвольного разделителя переменной длины:
#!/bin/bash
separator=")|(" # e.g. constructing regex, pray it does not contain %s
foo=('foo bar' 'foo baz' 'bar baz')
regex="$( printf "${separator}%s" "${foo[@]}" )"
regex="${regex:${#separator}}" # remove leading separator
echo "${regex}"
# Prints: foo bar)|(foo baz)|(bar baz