Coffeescript 类不返回函数的最后一个语句
Posted
技术标签:
【中文标题】Coffeescript 类不返回函数的最后一个语句【英文标题】:Coffeescript Classes not returning last statement of function 【发布时间】:2012-08-18 08:10:11 【问题描述】:我一直在使用咖啡脚本类,据我所知,函数应该总是自动返回最后一条语句。但是,我发现构造函数对象中定义的函数默认情况下不返回任何内容。这是为什么呢?
咖啡脚本
constructor: ->
@ # <~~ returned as expected
class MyClass
constructor: ->
@ # <~~ not returned - why?
class MyClass
constructor: ->
return ->
@ # <~~ returned like normal!
javascript
var MyClass;
(
constructor: function()
return this;
);
MyClass = (function()
function MyClass()
this;
return MyClass;
)();
MyClass = (function()
function MyClass()
return function()
return this;
;
return MyClass;
)();
【问题讨论】:
【参考方案1】:当您在类上使用“new”关键字时会调用“constructor”方法 - 因此返回值始终应该是新实例,而不是您想要返回的其他值。但是,CoffeeScripts 似乎允许您通过“return”关键字强制使用不同的返回值。
class Foo
constructor: ->
f = new Foo
f instanceof Foo # expected to be very true...
当您将普通函数命名为“构造函数”(不是方法 = 类定义之外)时,它不是构造函数而是普通函数,因此按预期返回。
【讨论】:
我想知道“显式返回”是 CoffeeScript 中的错误(即正常函数翻译的副作用)还是故意的。我可以看到有人添加了“在 ctor 中没有隐式返回”逻辑,但忽略了添加“在 ctor 中没有显式返回值”检查。至少 plainreturn;
做正确的事。
@muistooshort 好点。我发现的只是:github.com/jashkenas/coffee-script/issues/…【参考方案2】:
如果你想从一个“构造函数”方法返回一个不同的对象,你 需要创建工厂方法,因为 Coffeescript 和 Javascript 不需要 允许重载“new”操作符
class A
@create: (params)-> new A params
constructor: (params)-> console.log params
a = A.create "foo"
【讨论】:
以上是关于Coffeescript 类不返回函数的最后一个语句的主要内容,如果未能解决你的问题,请参考以下文章
Keras MultiHeadAttention() 类不返回预期值