После попытки сделать такие "функциональные" вещи в C# (и даже попытка книги по нему), я пришел к выводу, что не, за немногим исключением, такие вещи не помогают слишком много.
главная причина состоит в том, что языки, такие как F# получают много своего питания от того, чтобы действительно поддерживать эти функции. Не "можно сделать это", но "это просто, это ясно, это ожидается".
, Например, в сопоставлении с образцом, Вы получаете компилятор, говоря Вам, если существует неполное соответствие или когда другое соответствие никогда не будет поражаться. Это менее полезно с открытыми законченными типами, но при соответствии дизъюнктному объединению или кортежам, это очень изящно. В F# Вы ожидаете, что люди скопируют соответствие, и это немедленно имеет смысл.
"проблема" состоит в том, что, как только Вы начинаете использовать некоторые функциональные понятия, естественно хотеть продолжиться. Однако усиливая кортежи, функции, частичное приложение метода и приправление карри, сопоставление с образцом, вложенные функции, дженерики, поддержка монады, и т.д. в C# становится очень ужасной, очень быстро. Интересно, и некоторые очень умные люди сделали некоторые очень прохладные вещи в C#, но на самом деле использование это чувствует себя тяжелым.
, Что я закончил тем, что использовал часто (через проекты) в C#:
**, Но действительно отметьте: отсутствие автоматического обобщения и вывода типа действительно препятствует использованию даже этих функций. **
Все это сказало, как кто-то еще упомянул, в малочисленной команде, для определенной цели, да, возможно, они могут помочь, если Вы застреваете с C#. Но по моему опыту, они обычно чувствовали себя подобно большему количеству стычки, чем они стоили - YMMV.
Некоторые другие ссылки:
Эти маркеры фактически заменяются с помощью стандартных API-интерфейсов java.text.MessageFormat. Если вы отображаете сообщения с использованием тега Grail g: message, он заполнит пробелы, если вы передадите подходящий атрибут args = "...":
<g:message code="mymessagecode" args="${['size', 'org.example.Something']}"/>
При определенных обстоятельствах (на страницах GSP и из контроллеров IIRC) вы не можете вызвать тег как функция:
g.message(code:'mymessagecode',args: ['size', 'org.example.Something'])
Обратите внимание, что значение, передаваемое в качестве кода сообщения, является только символьной строковой константой. Фактический перевод (текст сообщения с «пробелами» в нем) будет прочитан фреймворком с использованием перезагружаемых пакетов ресурсов Spring.
Если все, что у вас есть на самом деле, это текст перевода, вы можете напрямую вызвать API форматирования сообщений. См., Например:
import java.text.MessageFormat
...
args = ["english"].toArray()
println(MessageFormat.format("Translation into {0}", args))
// Or - as the method is variadic:
println(MessageFormat.format("Translation into {0}", "english"))