Kasper Daniel Hansen
2025-Jun-02 20:59 UTC
[Rd] Specifying a long string literal across several lines
Like Tomas, I find the paste0 readability to be **much** better, partly because it allows for better indentation (as Tomas pointed out). Perhaps a pointless email, but sometimes - for these subjective issues - it is worthwhile to point out a difference in opinion. Best, Kasper On Mon, Jun 2, 2025 at 12:27?PM Tomas Kalibera <tomas.kalibera at gmail.com> wrote:> > On 6/2/25 17:37, Josiah Parry wrote: > > Tomas, > > > > Here is a good example of where this functionality would be useful: > > > https://github.com/R-ArcGIS/arcgislayers/blob/2b29f4c254e7e5a1dadce8d4b0015a70dfae39d4/R/arc-open.R#L19-L56 > > > > In order to prevent R CMD check notes I have to use `paste0()` to > > concatenate long URLs. If we were able to use `\` to > > separate the string across multiple lines, it would make the solution > > much nicer! > > It may be a matter of taste. To me the current form > > #' furl <- paste0( > #' "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/", > #' "PLACES_LocalData_for_BetterHealth/FeatureServer/0" > #' ) > #' > > would be actually clearer than say this: > > #' # FeatureLayer > #' furl <- > "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/\ > PLACES_LocalData_for_BetterHealth/FeatureServer/0 > <https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/%5CPLACES_LocalData_for_BetterHealth/FeatureServer/0> > " > #' > > Inside a per-line comment (#), a backslash followed by a newline would > probably be disallowed, anyway - e.g. in C it is considered dangerous > and is discouraged. And the code resulting from splices is hard to read > due to missing indentation. There is also risk of accidentally putting a > space after the backslash before the end of line (which some > languages/parsers then don't treat as a splice, some do, some issue a > warning - of course it is hard to see in the code). > > The idea of automatically concatenating consecutive string literals as > in C would not easily work in R. This is now valid R code: > > x <- "part1" > "part2" > > if we introduced concatenation, we would change behavior of this code > (the value of x would be different, the result of these two lines would > be different). > > I think paste0() is not that bad in the end. > > Best > Tomas > > > On Mon, Jun 2, 2025 at 3:19?AM Tomas Kalibera > > <tomas.kalibera at gmail.com> wrote: > > > > > > On 5/28/25 04:15, Pavel Krivitsky via R-devel wrote: > > > Dear All, > > > > > > Perhaps this should go in r-package-devel, but I suspect that > > this is > > > going to turn into a feature request, and I want to run it by > > the list > > > before filing it in the Bugzilla. > > > > > > I would like to specify a long string literal without making the > > line > > > of code too long. In R, > > > > > > "abc > > > def" > > > > > > yields the string "abc\def", and, as far as I can tell, there is no > > > mechanism for preventing it from inserting a newline into the > > string. > > > > > > Putting a backslash before the newline, i.e., > > > > > > "abc\ > > > def" > > > > > > eliminates the newline in (that I know of) C/C++, Python, and > Julia, > > > but it makes no difference in R. > > > > > > The implicit concatenation of Python and C/C++, e.g., "abc" > > "def", is a > > > syntax error as well in R. > > > > > > It is, of course, possible to use paste0(), but is there a more > > concise > > > built-in mechanism in R of which I am not aware? > > > > > > If not, I think it would make sense to bring R in line with the > > others. > > > Currently, backslash and no backslash before a newline behave > > > identically (at least as far as I can tell), so I doubt that a > > > nontrivial amount of code relies on the current behaviour. [1] > > > > What would be real example of a long string literal you would want to > > enter this way? > > > > For entering a long text with newlines, one can use raw strings in R > > (see ?Quotes) - but there you would see the newlines and indentation. > > I've seen code where "paste0" has been aliased to a local function > > named with a single letter to make concatenation more concise. > > > > Best > > Tomas > > > > > > > > Any thoughts? > > > Pavel > > > > > > [1] On the off chance that it does, it should easy to check by > > > searching for "\\\n" in package sources, because a backslash > > before a > > > newline is a syntax error outside a string. > > > ______________________________________________ > > > R-devel at r-project.org mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Best, Kasper [[alternative HTML version deleted]]
Josiah Parry
2025-Jun-02 21:17 UTC
[Rd] Specifying a long string literal across several lines
I suppose taste is learned as well. It does feel quite odd that the best way to define a long string without a note or text wrapping is by being creative with functions. This is valid in Python, Julia, and Rust (if you add `let` and a terminating semi-colon): my_str = "part1\ part2\ part2" I don't think it is abnormal to expect or desire this type of functionality in our favorite language. On Mon, Jun 2, 2025 at 13:59 Kasper Daniel Hansen < kasperdanielhansen at gmail.com> wrote:> Like Tomas, I find the paste0 readability to be **much** better, partly > because it allows for better indentation (as Tomas pointed out). Perhaps a > pointless email, but sometimes - for these subjective issues - it is > worthwhile to point out a difference in opinion. > > Best, > Kasper > > On Mon, Jun 2, 2025 at 12:27?PM Tomas Kalibera <tomas.kalibera at gmail.com> > wrote: > >> >> On 6/2/25 17:37, Josiah Parry wrote: >> > Tomas, >> > >> > Here is a good example of where this functionality would be useful: >> > >> https://github.com/R-ArcGIS/arcgislayers/blob/2b29f4c254e7e5a1dadce8d4b0015a70dfae39d4/R/arc-open.R#L19-L56 >> > >> > In order to prevent R CMD check notes I have to use `paste0()` to >> > concatenate long URLs. If we were able to use `\` to >> > separate the string across multiple lines, it would make the solution >> > much nicer! >> >> It may be a matter of taste. To me the current form >> >> #' furl <- paste0( >> #' "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/", >> #' "PLACES_LocalData_for_BetterHealth/FeatureServer/0" >> #' ) >> #' >> >> would be actually clearer than say this: >> >> #' # FeatureLayer >> #' furl <- >> "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/\ >> PLACES_LocalData_for_BetterHealth/FeatureServer/0 >> <https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/%5CPLACES_LocalData_for_BetterHealth/FeatureServer/0> >> " >> #' >> >> Inside a per-line comment (#), a backslash followed by a newline would >> probably be disallowed, anyway - e.g. in C it is considered dangerous >> and is discouraged. And the code resulting from splices is hard to read >> due to missing indentation. There is also risk of accidentally putting a >> space after the backslash before the end of line (which some >> languages/parsers then don't treat as a splice, some do, some issue a >> warning - of course it is hard to see in the code). >> >> The idea of automatically concatenating consecutive string literals as >> in C would not easily work in R. This is now valid R code: >> >> x <- "part1" >> "part2" >> >> if we introduced concatenation, we would change behavior of this code >> (the value of x would be different, the result of these two lines would >> be different). >> >> I think paste0() is not that bad in the end. >> >> Best >> Tomas >> >> > On Mon, Jun 2, 2025 at 3:19?AM Tomas Kalibera >> > <tomas.kalibera at gmail.com> wrote: >> > >> > >> > On 5/28/25 04:15, Pavel Krivitsky via R-devel wrote: >> > > Dear All, >> > > >> > > Perhaps this should go in r-package-devel, but I suspect that >> > this is >> > > going to turn into a feature request, and I want to run it by >> > the list >> > > before filing it in the Bugzilla. >> > > >> > > I would like to specify a long string literal without making the >> > line >> > > of code too long. In R, >> > > >> > > "abc >> > > def" >> > > >> > > yields the string "abc\def", and, as far as I can tell, there is >> no >> > > mechanism for preventing it from inserting a newline into the >> > string. >> > > >> > > Putting a backslash before the newline, i.e., >> > > >> > > "abc\ >> > > def" >> > > >> > > eliminates the newline in (that I know of) C/C++, Python, and >> Julia, >> > > but it makes no difference in R. >> > > >> > > The implicit concatenation of Python and C/C++, e.g., "abc" >> > "def", is a >> > > syntax error as well in R. >> > > >> > > It is, of course, possible to use paste0(), but is there a more >> > concise >> > > built-in mechanism in R of which I am not aware? >> > > >> > > If not, I think it would make sense to bring R in line with the >> > others. >> > > Currently, backslash and no backslash before a newline behave >> > > identically (at least as far as I can tell), so I doubt that a >> > > nontrivial amount of code relies on the current behaviour. [1] >> > >> > What would be real example of a long string literal you would want >> to >> > enter this way? >> > >> > For entering a long text with newlines, one can use raw strings in R >> > (see ?Quotes) - but there you would see the newlines and >> indentation. >> > I've seen code where "paste0" has been aliased to a local function >> > named with a single letter to make concatenation more concise. >> > >> > Best >> > Tomas >> > >> > > >> > > Any thoughts? >> > > Pavel >> > > >> > > [1] On the off chance that it does, it should easy to check by >> > > searching for "\\\n" in package sources, because a backslash >> > before a >> > > newline is a syntax error outside a string. >> > > ______________________________________________ >> > > R-devel at r-project.org mailing list >> > > https://stat.ethz.ch/mailman/listinfo/r-devel >> > >> > ______________________________________________ >> > R-devel at r-project.org mailing list >> > https://stat.ethz.ch/mailman/listinfo/r-devel >> > >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > > > -- > Best, > Kasper >[[alternative HTML version deleted]]
Apparently Analagous Threads
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines