文档说
Run Code Online (Sandbox Code Playgroud)make_ref() -> ref()返回一个几乎唯一的引用.
返回的参考将在大约2 82次呼叫后重新发生; 因此它具有足够的实用性.
但我的眼睛告诉我,在VM重启之间,我可以轻松得到相同的参考:
[~] erl
Erlang R14B04 (erts-5.8.5)
1> make_ref().
#Ref<0.0.0.33>
2> make_ref().
#Ref<0.0.0.37>
^C
[~] erl
Erlang R14B04 (erts-5.8.5)
1> make_ref().
#Ref<0.0.0.33>
Run Code Online (Sandbox Code Playgroud)
那么,Erlang的Refs有多独特呢?当标记在mq或db中持久存在并且可能由不同的VM会话生成时,它们是否适合用作唯一的"标记"生成器.
我知道UUID可以用于此.众所周知,pids()是可重复的,可重用的,如果是序列化的,则绝不是唯一的,然后从持久存储加载.
问题是,什么是refs() - 更像是UUID或更像pids()?节点之间的refs()是否唯一?重启之间?有关于这个主题的官方信息吗?
我阅读了传递数组的页面使用ref和out(C#编程指南),并想知道为什么我们需要将数组参数定义为ref参数(当它已经是引用类型时).被调用函数中的更改不会反映在调用函数中吗?
我有一个由第三方提供的.Net库.我对其中一个类进行了反射,并找到了一个成员方法.签名是......
Byte& FooBar()
Run Code Online (Sandbox Code Playgroud)
所以,我想通过反射调用这个方法并获得异常"反射调用中不支持ByRef返回值".
这是我试过的......
var strm = new TheirClass();
var t = strm.GetType();
var ms = t.GetMembers(
BindingFlags.Static|BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach (var m in ms)
{
Debug.WriteLine(String.Format("Name: {0}: {1}", m.Name, m.ToString()));
// ...
// Name: FooBar: Byte& FooBar()
// ...
}
var meth = t.GetMethod("FooBar");
object returnValue = meth.Invoke(strm, new object[] { }); //throw exception
Run Code Online (Sandbox Code Playgroud)
我已经尝试提供参数,如使用ref参数调用函数,但这没有任何区别.
我想在C#中解决这个异常.
在 C# 中将列表作为参数作为 ref 传递有什么好处?List 不是值类型,因此对它所做的每个更改都会在返回函数后反映出来。
class Program
{
static void Main(string[] args)
{
var myClass = new MyClass();
var list = new List<string>();
myClass.Foo(ref list);
foreach (var item in list)
{
Console.WriteLine(item);
}
}
}
class MyClass
{
public void Foo(ref List<string> myList)
{
myList.Add("a");
myList.Add("b");
myList.Add("c");
}
}
Run Code Online (Sandbox Code Playgroud)
我可以删除“ref”,它会正常工作。所以我的问题是我们需要为列表、数组添加 ref 关键字有什么用途......谢谢
我正在浏览ref返回的来龙去脉,并且无法发出一个由ref返回的动态方法.
手工制作的lambdas和现有方法按预期工作:
class Widget
{
public int Length;
}
delegate ref int WidgetMeasurer(Widget w);
WidgetMeasurer GetMeasurerA()
{
return w => ref w.Length;
}
static ref int MeasureWidget(Widget w) => ref w.Length;
WidgetMeasurer GetMeasurerB()
{
return MeasureWidget;
}
Run Code Online (Sandbox Code Playgroud)
但是发出动态方法失败了.注意:我在这里使用Sigil.道歉,我不太熟悉System.Reflection.Emit.
WidgetMeasurer GetMeasurerC()
{
FieldInfo lengthField = typeof(Widget).GetField(nameof(Widget.Length));
var emitter = Emit<WidgetMeasurer>.NewDynamicMethod()
.LoadArgument(0)
.LoadFieldAddress(lengthField)
.Return();
return emitter.CreateDelegate();
}
Run Code Online (Sandbox Code Playgroud)
NewDynamicMethod投掷失败了'The return Type contains some invalid type (i.e. null, ByRef)'.这是有道理的,因为我明白在引擎盖下WidgetMeasurer返回一个Int32&.
问题是,是否有一些第一方或第三方技术可以用来发出模仿前两个例子的代码(我凭经验知道它可以正常工作)?如果没有,这个限制是否合乎逻辑?
编辑 …
我有一些延伸几页的长表,我想使用pageref和hyperref链接到这些行.
但无论我尝试什么,链接总是指代表的开头.当我查看aux文件时,标签似乎都被重新定义到表中.[表格的数量].
我尝试将隐形虚拟数字放入表中,但这只是给了我太多浮点数的错误.
我也尝试将标签放入小型设备,但无济于事.
即使将标签放入脚注也不起作用,不知何故长期似乎总能找到它们.
我有下面的组件可以正常工作,但是如果我只是代替this.refs.searchString.value它会工作吗?event.target.value如果是这样,哪一种是首选方法?各自的优点和缺点是什么?
const SearchBar = React.createClass({
handleSubmit (event) {
event.preventDefault()
const formattedSearchString = this.refs.searchString.value.replace(/[^a-z]/gi, "").toLowerCase()
this.refs.searchString.value = ''
this.props.submitSearch(formattedSearchString)
},
render() {
return (
<form className="form form-group has-info col-md-4 text-align-center" onSubmit={this.handleSubmit}>
<input className="search-input form-control" type="text" ref="searchString" placeholder=" . . . enter pokemon name" />
<button className="btn btn-info btn-raised" type="submit" name="button">Search!</button>
</form>
)
}
})
Run Code Online (Sandbox Code Playgroud) 我正在尝试向特定于列表中项目的跨度标记呈现消息。我读过很多关于 React 'refs' 的内容,但不知道如何在引用消息后用消息填充跨度。
因此,有一个项目列表,每个项目行都有自己的按钮,该按钮会触发具有与该项目关联的 id 的 API。根据 API 响应,我想用响应消息更新 span 标签,但仅限于该项目
创建列表时,项目将循环通过,每个项目都包含此
<span ref={'msg' + data.id}></span><Button onClick={() => this.handleResend(data.id)}>Resend Email</Button>
Run Code Online (Sandbox Code Playgroud)
API 调用后,我想引用特定的跨度并在其中呈现正确的消息。但我无法弄清楚如何在代码的这一点上渲染到跨度。我知道这行不通,但这本质上就是我想要做的。有任何想法吗?
if (response.status === 200) {
this.refs['msg' + id] = "Email sent";
Run Code Online (Sandbox Code Playgroud) 我想创建一个组件,它从 props 和 child 接受其类型(例如“div”、“span”)并渲染它们,该组件还支持引用转发和 className prop。
问题是我收到错误'className' does not exist on type 'IntrinsicAttributes,并且无法找出导致该错误的原因。
我尝试将我提供的类型更改为forwardRef不同HTMLElement的类型,在谷歌上搜索类似的组件,但这没有什么帮助。
HTMLElement例如,当我更改为 ,HTMLDivElement并更改<Component ...>为此错误时<div ...>,该错误就会消失。所以问题可能是类型错误 ( HTMLElement)
这是组件代码:
import React, { ReactChildren, ComponentType } from "react"
interface MyComponentProps {
children: ReactChildren
component: string | ComponentType
className: string
}
const MyComponent = React.forwardRef<HTMLElement, MyComponentProps>(
(props, ref) => {
const { children, className, component: Component, ...otherProps } = props
return (
<Component className={className} ref={ref} …Run Code Online (Sandbox Code Playgroud) 我正在使用 Hooks 开发一个 React Native 应用程序。(无课程)。当我们使用类时,我们可以像这样创建对子组件的引用。
<Child ref={component => this.childComponent = component} />
Run Code Online (Sandbox Code Playgroud)
但是,当我们使用 Hooks 时,该怎么做呢?
我想要这样的东西。
export default function Child() {
const foo = () => {
//do something
}
return(
//something
)
}
export default function Parent() {
const myFunc = () => {
ref.foo();
}
return(
<Child ref={.........} /> //This is what I want to know how to do?
)
}
Run Code Online (Sandbox Code Playgroud)
我希望你明白我想说的。
ref ×10
c# ×4
reactjs ×3
javascript ×2
reflection ×2
delegates ×1
erlang ×1
events ×1
hyperref ×1
invoke ×1
label ×1
latex ×1
list ×1
longtable ×1
out ×1
react-hooks ×1
react-native ×1
target ×1
typescript ×1
uuid ×1