Comments (7)
I'd also be interested in the ability to specify a nullable default. For example, in the case of this file we default to a path specified by a system property which may not be present.
val path by parser.storing("The path", ::File)
.optional()
.default(System.env("THE_PATH")?.let(::File))
from kotlin-argparser.
Does something like this do what you want?
val path by parser.storing<File?>("The path", ::File)
.default(System.getenv("THE_PATH")?.let(::File))
It would be nice if a nullable default made the Delegate's type nullable. Actually, it would be nice if in in general setting the default could "relax" the type of the delegate (that is, make the Delegate into a Delegate where S is a super-type of T and the default value).
I'm currently investigating to see if there's a way to do this in Kotlin's type system.
from kotlin-argparser.
Hmm I was under the impression that the internals required a non-null value but I might have been mistaken. I will give your suggestion a try today.
from kotlin-argparser.
If they do, that is probably a bug. I jumped through some hoops to distinguish between "not set" and "set to null".
from kotlin-argparser.
Ok so it works for File?
when explicitly specified and which allows the use of default(null)
(or some nullable thing).
It's a bit awkward for nullable string arguments though as you have to pass an identity function because the non-transformer overload doesn't have a generic parameter.
val title by parser.storing<String?>("Execution title", { this }).default(null)
from kotlin-argparser.
That's a good point. Commit 1bc1474 changes the way default
works that fixes this. It makes default
into an extension method, and so now the default value can be nullable, actually null, or even some other type. The resulting property will have the most specific superclass. In the case of starting with a Delegate<String>
, you'll get a Delegate<String?>
if the default is null
or String?
, regardless of which factory method created the original.
It's a somewhat backwards incompatible change, as Delegate
is now an abstract class instead of an interface. Really, I probably should have done that from the beginning, as I never meant for people to be able to create their own Delegate
implementations.
from kotlin-argparser.
I'm going to close this as I think 1bc1474 should solve the root issue.
from kotlin-argparser.
Related Issues (20)
- Allow '.' as Separator in Options and Arguments HOT 2
- Hierarchical arguments
- Print help when catching SystemExitException HOT 1
- Is it possible to allow number parameters HOT 3
- Incorrect example main function in README.md HOT 1
- Readme example does not work HOT 3
- Exception in thread "main" com.xenomachina.argparser.ShowHelpException: Help was requested HOT 3
- InvalidArgumentName when argument name has trailing digit HOT 2
- Allow escaping strings HOT 6
- Include exception handling in force parse HOT 3
- Make `mainBody` behavior the default when parsing args HOT 3
- Help section titles should be capitalized HOT 2
- Interest in better support for sub parsers HOT 2
- Don't be too strict with positional and positionalList names
- Influcence exit behaviour
- better handling of long parameter names in the default formatter
- Is this project dead? HOT 1
- Support options of the form "-<number>" (hyphen immediately followed by a number)
- JCenter end of life
- kotlin-argparser and native?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kotlin-argparser.