Comments (8)
The problem is that the plain Dictionary cannot implement interfaces, because doing so would require extension of Object.prototype which is quite intrusive (and the IDictionary.TryGetValue member cannot be reasonably implemented even if we accept an extension of Object.prototype).
In S# (I think), the IDictionary interface isn't possible to implement in a working fasion due to these issues.
As a replacement for the S# Dictionary(params object[]) constructor, use JsDictionary.GetDictionary(new { param1 = "value1", param2 = 10 })
.
I am not too happy about introducing compiler support for the mentioned constructor, as it would require quite a lot of code for this single feature (a new ConstructorScriptSemantics.ImplType, with handling of that, tests, and also the metadata importer). However, your idea of an mscorlib helper method is not bad, neither too much work.
from saltarellecompiler.
So, is it ok to add a new constructor to JsDictionary like
[InlineCode("ss.setDictionaryInitialValues({initialValues})]
public JsDictionary(params object[] initialValues)
{
}
One could use this InlineCode with his own imported objects.
I'll work on it if you'll agree.
from saltarellecompiler.
Yes, I think that is a good idea (but perhaps with a shorter method name).
I haven't worked with S# in a while, why would one want to use that on his own imported objects? Does S# support adding a constructor with this signature to any object and it will be treated as an object initializer?
from saltarellecompiler.
Actually, we could add an if
in the ScriptSharpMetadataImporter to apply this InlineCodeAttribute automatically for any .ctor(params object[] args)
constructor in an [Imported] type.
from saltarellecompiler.
Yes it did and initial jquery plugin templates for ScriptSharp had such constructors for plugin Option objects.
It is even still used in current jQuery.UI implementation of S#
Example:
https://github.com/nikhilk/scriptsharp/blob/master/src/Libraries/jQuery/jQuery.UI/PositionOptions.cs
So this constructor type is not only for Dictionary, but all imported objects.
from saltarellecompiler.
Don't take me wrong, i think Saltarelle works great, and such incompabilities is do to some missing/incosistent parts in S#'s side. But, if you care about adoptation rate, porting an existing code from S# should require minimum changes. As, not all users will be as insistent as me. Most will try your compiler, get some errors, think it doesn't work like it should, and move on.
from saltarellecompiler.
I agree with you on that, and I think your idea with an mscorlib helper will solve this issue for us (as I said, we can auto-apply this attribute in the metadata importer). I just didn't come up with the idea myself.
from saltarellecompiler.
params object[] constructors are implemented and will be supported in 1.2.1
from saltarellecompiler.
Related Issues (20)
- [2.6.2] Canceled tasks should throw TaskCanceledException instead of InvalidOperationException HOT 3
- Status? HOT 1
- [2.6.2] Combining async, finally and IList/IEnumerable results in an incorrect execution workflow HOT 3
- Bridge.NET Acquires Saltarelle HOT 54
- Boolean XORs generate incorrect result HOT 1
- Non-serializable properties for serializable types HOT 1
- int.Parse() gets translated to parseInt(), which isn't precise HOT 4
- Bug in inheritance? HOT 3
- INTERNAL ERROR: ResolveResult ConversionResolveResult HOT 6
- Add support for InternalsVisibleTo attribute HOT 3
- [2.7.0] Asynchronous tasks swallow exceptions
- Minifier incorrectly minifies '+ ++' into '+++'
- When using [NamedValuesAttribute] on an enum, that enum's values are not compiled correctly when used as default parameters HOT 3
- If the data exict HOT 1
- Saltarelle.Runtime HOT 1
- Saltarelle rewrites Mixing expression $.expr[':'] to $["expr[':']"] HOT 1
- Provide toString override for Exception class, otherwise uncaught exceptions will end up logged as [object Object]
- ss_Int32.tryParse returns 0 when value can't be parsed (when input does not match regexp)
- Dictionary issue on Chrome HOT 3
- Saltarelle.Compiler 2.7.0 - INTERNAL ERROR: System.TypeLoadException
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 saltarellecompiler.